15 python學習筆記-多進程multiprocessing

上篇介紹了Python的多線程,python的多線程是不能利用多核CPU的,若是想利用多核CPU的話,就得使用多進程。python中多進程使用multiprocessing模塊。python

一、python多進程實例以下:多線程

 1 import multiprocessing,time  2 def down_load():  3     time.sleep(1)  4     print("運行完了")  5 
 6 if __name__ == '__main__':  7     start_time=time.time()  8     for i in range(5):  9         p = multiprocessing.Process(target=down_load) #建立一個進程
10         p.start() #啓動進程
11     while len(multiprocessing.active_children())!=0:#等待子進程結束,效果同於join
12         pass
13     end_time=time.time() 14     print(multiprocessing.current_process()) #輸出當前運行的線程
15     print(end_time-start_time) 16     print('end')

=======================================執行結果========================================

運行完了
運行完了
運行完了
運行完了
運行完了
<_MainProcess(MainProcess, started)>
1.1728615760803223
endapp

二、進程池poolasync

使用進程池能夠快速的啓動幾個進程,進程池的好處的就是它會自動管理進程數,咱們只須要給它設置一個最大的值。有新的請求提交到Pool中時,若是池尚未滿,那麼就會建立一個新的進程用來執行該請求;但若是池中的進程數已經達到指定的最大值,那麼該請求就會等待,直到池中有進程結束,纔會用以前的進程來執行新的任務。函數

 1 from multiprocessing import Pool  2 import os  3  
 4  
 5 def worker(msg):  6     print("%s開始執行,進程號爲%d" % (msg,os.getpid()))  7  
 8 if __name__ == '__main__':  9     
10     po = Pool(3)  # 定義一個進程池,最大進程數3
11     for i in range(0, 10): 12         # Pool().apply_async(要調用的目標,(傳遞給目標的參數元祖,))
13         # 每次循環將會用空閒出來的子進程去調用目標
14         po.apply_async(func=worker,args=(i,)) 15         #第一個func參數指定運行的函數,第二個args是參數,沒有參數能夠不寫
16     print("----start----") 17     po.close()  # 關閉進程池,關閉後po再也不接收新的請求
18     po.join()  # 等待po中全部子進程執行完成,必須放在close語句以後
19     print("-----end-----")
================================執行結果===================================

----start----
0開始執行,進程號爲238231開始執行,進程號爲23824spa

2開始執行,進程號爲23825
3開始執行,進程號爲23823
4開始執行,進程號爲23824
5開始執行,進程號爲23823
6開始執行,進程號爲23825
7開始執行,進程號爲23824
8開始執行,進程號爲23823
9開始執行,進程號爲23824
-----end-----線程

相關文章
相關標籤/搜索