1 """ 2 非阻塞模式:當進程池有空閑,就將任務放入,它會繼續執行主進程 3 """ 4 import os 5 import time 6 from multiprocessing import Pool 7 from random import random 8 9 container = [] 10 11 12 def task(name): 13 print("進行任務{} 進程ID:{}".format(name, os.getpid())) 14 start = time.time() 15 # random() 的值是0到1之間,這里就表示休眠 0到2秒 16 time.sleep(random() * 2) 17 end = time.time() 18 return "完成任務:{} 用時:{} 進程ID:{}".format(name, (end - start), os.getpid()) 19 20 21 def callback_func(n): 22 """將進程返回的內容n,放進這個函數內運行""" 23 container.append(n) # 添加返回內容到container,這里也可以對返回的函數進行其它的處理 24 25 26 if __name__ == '__main__': 27 pool = Pool(5) # 創建一個進程池,里面放5個進程 28 tasks = ["任務1", "任務2", "任務3", "任務4", "任務5", "任務6", "任務7"] 29 for t in tasks: 30 # apply_async 非阻塞模式,只要存在沒有使用的進程,就將任務放進去 31 pool.apply_async(task, args=(t,), callback=callback_func) 32 33 pool.close() 34 pool.join() # 將進程池插入到這里,只要當它里面的任務全部都執行完,才繼續 35 36 for c in container: 37 print(c) 38 39 print("over")