5-14 进程池
python中的進程池
1.進程池的概念
python中,進程池內部會維護一個進程序列。當需要時,程序會去進程池中獲取一個進程。
如果進程池序列中沒有可供使用的進程,那么程序就會等待,直到進程池中有可用進程為止。
2.進程池的內置方法
- apply 從進程池里取一個進程并同步執行
- apply_async 從進程池里取出一個進程并異步執行
- terminate 立刻關閉進程池
- join 主進程等待所有子進程執行完畢,必須在close或terminete之后
- close 等待所有進程結束才關閉線程池
同步是指一個進程在執行某個請求的時候,必須要到收到對方返回的信息才繼續執行下去
異步是指進程在執行某個請求時,不管其他的進程的狀態,這個進程就執行后續操作;
當有消息返回時系統會通知進程進行處理,這樣可以提高執行的效率
例如:打電話就是同步通信,發信息就是異步通信。
3.進程池的使用
代碼如下:
from multiprocessing import Pool import timedef func(args): time.sleep(1) #程序休眠1s print("%s------>%s"%(args,time.ctime())) #打印參數及時間 if __name__=="__main__": p1=Pool(2) #設定開啟2個進程池 for i in range(10): p1.apply_async(func=func,args=(i,)) #設定異步執行任務 p1.close() #關閉進程池 time.sleep(2) #程序休眠2s p1.terminate() #關閉進程池 p1.join() #阻塞進程池 print("ending") #打印結束語句程序執行結果:
0------>Thu Jul 20 20:18:43 2017 1------>Thu Jul 20 20:18:43 2017 ending可以看到,在程序執行過程中,關閉進程池,則程序會立即停止,不會再繼續執行后續語句。
4.修改程序,使程序能夠執行全部的任務
代碼如下:
from multiprocessing import Pool import timedef func(args): time.sleep(1) #休眠1s print("%s------>%s"%(args,time.ctime())) #打印傳遞的參數及時間 if __name__=="__main__": p1=Pool(2) #定義2個進程池 for i in range(10): #定義循環10次 p1.apply_async(func=func,args=(i,)) #異步執行任務 p1.close() #等待所有的任務都完成才關閉進程池 p1.join() print("ending")執行結果如下:
0------>Thu Jul 20 20:19:12 2017 1------>Thu Jul 20 20:19:12 2017 2------>Thu Jul 20 20:19:13 2017 3------>Thu Jul 20 20:19:13 2017 4------>Thu Jul 20 20:19:14 2017 5------>Thu Jul 20 20:19:14 2017 6------>Thu Jul 20 20:19:15 2017 7------>Thu Jul 20 20:19:15 2017 8------>Thu Jul 20 20:19:16 2017 9------>Thu Jul 20 20:19:16 2017 ending轉載于:https://www.cnblogs.com/yzxing/p/9038122.html
總結
- 上一篇: 清结算系统的一些思考
- 下一篇: python-9-IO编程