Python 程序,程序池
阿新 • • 發佈:2018-12-07
注意:程序池中的程序如果發生異常時,主程序中並不會得到異常提示。
如果程序池中的程序要使用佇列(Queue)實現程序間通訊,必須使用queue = multiprocessing.Manager().Queue() 的方式建立佇列(需要先匯入multiprocessing模組)。
demo.py(程序池):
# -*- 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 # 向程序池中迴圈新增10個任務 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-----")