python Pool常用函數用法總結
1、說明
apply_async(func[,args[,kwds]):使用非堵塞調用func(並行執行,堵塞方式必須等待上一個過程退出才能執行下一個過程),args是傳輸給func的參數列表,kwds是傳輸給func的關鍵詞參數列表。
close():關閉Pool,使之不再接受新任務。
terminate():無論任務是否完成,都要立即終止。
join():主進程堵塞,等待子進程退出,必須在close或terminate之後使用。
2、實例
#coding: utf-8 import multiprocessing import time def func(msg): print("msg:", msg) time.sleep(3) print("end") if __name__ == "__main__": cores = multiprocessing.cpu_count() pool = multiprocessing.Pool(processes=cores) print("Adding tasks...") for i in range(cores): msg = "hello %d" %(i) pool.apply_async(func, (msg, )) #維持執行的進程總數為processes,當一個進程執行完畢後會添加新的進程進去 print("Starting tasks...") pool.close() pool.join() #調用join之前,先調用close函數,否則會出錯。執行完close後不會有新的進程加入到pool,join函數等待所有子進程結束 print("Sub-process(es) done.")
實例擴展:
# -*- coding:utf-8 -*- from multiprocessing import Pool import os, time, random def worker(msg): t_start = time.time() print("%s開始執行,進程號為%d" % (msg,os.getpid())) # random.random()隨機生成0~1之間的浮點數 time.sleep(random.random()*2) t_stop = time.time() print(msg,"執行完畢,耗時%0.2f" % (t_stop-t_start)) po = Pool(3) # 定義一個進程池,最大進程數3 for i in range(0,10): # Pool().apply_async(要調用的目標,(傳遞給目標的參數元祖,)) # 每次循環將會用空閑出來的子進程去調用目標 po.apply_async(worker,(i,)) print("----start----") po.close() # 關閉進程池,關閉後po不再接收新的請求 po.join() # 等待po中所有子進程執行完成,必須放在close語句之後 print("-----end-----")
運行結果
—-start—-
0開始執行,進程號為21466
1開始執行,進程號為21468
2開始執行,進程號為21467
0 執行完畢,耗時1.01
3開始執行,進程號為21466
2 執行完畢,耗時1.24
4開始執行,進程號為21467
3 執行完畢,耗時0.56
5開始執行,進程號為21466
1 執行完畢,耗時1.68
6開始執行,進程號為21468
4 執行完畢,耗時0.67
7開始執行,進程號為21467
5 執行完畢,耗時0.83
8開始執行,進程號為21466
6 執行完畢,耗時0.75
9開始執行,進程號為21468
7 執行完畢,耗時1.03
8 執行完畢,耗時1.05
9 執行完畢,耗時1.69
—–end—–
到此這篇關於python Pool常用函數用法總結的文章就介紹到這瞭,更多相關python Pool常用函數有哪些內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found