1. 程式人生 > >Python 程序,程序池

Python 程序,程序池

 

注意:程序池中的程序如果發生異常時,主程序中並不會得到異常提示。

如果程序池中的程序要使用佇列(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-----")