python 非阻塞模式 進程池


 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")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM