python的multiprocessing模組進程建立、資源回收-Process,Pool

來源:互聯網
上載者:User

標籤:log   start   調用   proc   完全   有一個   對象   color   title   

python的multiprocessing有兩種建立進程的方式,每種建立方式和進程資源的回收都不太相同,下面分別針對Process,Pool及系統內建的fork三種進程分析。

1.方式一:fork()

舉例:

1 import os2 pid = os.fork() # 建立一個子進程3 os.wait() # 等待子進程結束釋放資源4 pid為0的代表子進程。

缺點:
1.相容性差,只能在類linux系統下使用,windows系統不可使用;
2.擴充性差,當需要多條進程的時候,進程管理變得很複雜;
3.會產生“孤兒”進程和“殭屍”進程,需要手動回收資源。
優點:
是系統內建的接近低層的建立方式,運行效率高。

 

2.方式二:Process進程
舉例:

1 import multiprocessing as ms2 def test():3 pass4 p1 = ms.Process(target=test) # 建立子進程5 p1.start() # 子進程 開始執行6 p1.join() # 等待子進程結束

特點:
1.注意:Process對象可以建立進程,但Process對象不是進程,其刪除與否與系統資源是否被回收沒有直接的關係。
2.主進程執行完畢後會預設等待子進程結束後回收資源,不需要手動回收資源;join()函數用來控制子進程
    結束的順序,其內部也有一個清除殭屍進程的函數,可以回收資源;
3.Process進程建立時,子進程會將主進程的Process對象完全複製一份,這樣在主進程和子進程各有一個Process
   對象,但是p1.start()啟動的是子進程,主進程中的Process對象作為一個靜態對象存在,不執行。
4.當子進程執行完畢後,會產生一個殭屍進程,其會被join函數回收,或者再有一條進程開啟,start函數也會回收
殭屍進程,所以不一定需要寫join函數。
5.windows系統在子進程結束後會立即自動清除子進程的Process對象,而linux系統子進程的Process對象
如果沒有join函數和start函數的話會在主進程結束後統一清除。

另外還可以通過繼承Process對象來重寫run方法建立進程,這裡不再贅述。

 

3.進程池Pool:

 1 import mutiprocessing as ms 2 def test(): 3 pass 4 p1 = Pool(5) # 建立5條進程 5 for i in range(10): 6 p1.apply_async(test) # 向進程池新增工作 7 p1.close() # 關閉進程池,不再接受請求 8 po.join() # 等待所有的子進程結束 9 while Ture:10 pass

分析:
1.如上,進程池Pool被建立出來後,即使實際需要建立的進程數遠遠大於進程池的最大上限,p1.apply_async(test)代碼
   依舊會不停的執行,並不會停下等待;相當於向進程池提交了10個請求,會被放到一個隊列中;
2.但是有一點很重要,當執行完p1 = Pool(5)這條代碼後,5條進程已經被建立出來了,只是還沒有為他們各自
   分配任務,也就是說,無論有多少任務,實際的進程數只有5條,電腦每次最多5條進程並行。

3.當Pool中有進程任務執行完畢後,這條進程資源會被釋放,pool會按先進先出的原則取出一個新的請求給閒置
   進程繼續執行;
4.當Pool所有的進程任務完成後,會產生5個殭屍進程,如果主線程不結束,系統不會自動回收資源,需要調用join函數去回收。
5.建立Pool池時,如果不指定進程最大數量,預設建立的進程數為系統的核心數量.

  另外還有一種阻塞式新增工作的方法,p1.apply(test),其每次只能向進程池添加一條任務,然後for迴圈會被堵塞等待,
直到添加的任務被執行完畢,進程池中的5個進程交替執行新來的任務,相當於單進程了。

進程在windows和linux系統下的對比

python的multiprocessing模組進程建立、資源回收-Process,Pool

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.