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