在python中啟動進程是非常耗資源的,有了進程池就可以限制同一時刻運行的進程數,避免程序崩潰。
Pool可以提供指定數量的進程供用戶調用,當有新的請求提交到pool中時,如果池還沒有滿,那么就會創建一個新的進程用來執行該請求;但如果池中的進程數已經達到規定最大值,那么該請求就會等待,直到池中有進程結束,才會創建新的進程來它。
進程池和線程池,進程池使用如下:
from multiprocessing import Process, Pool,freeze_support
import time
進程池的特點、import os
def Foo(i):
time.sleep(2)
進程池及通信、print("in process",os.getpid())
return i + 100
def Bar(arg):
有關進程池,print('-->exec done:', arg,os.getpid())
if __name__ == '__main__':
#freeze_support()
pool = Pool(processes=3) #允許進程池同時放入3個進程
print("主進程",os.getpid())
for i in range(10):
pool.apply_async(func=Foo, args=(i,), callback=Bar) #callback=回調 進程執行完畢后由父進程調用
#pool.apply(func=Foo, args=(i,)) #串行
#pool.apply_async(func=Foo, args=(i,)) #并行
print('end')
pool.close()
pool.join() #進程池中進程執行完畢后再關閉,如果注釋,那么程序直接關閉。.join()
運行結果:
主進程 12376
end
in process 8664
-->exec done: 100 12376
in process 13008
-->exec done: 101 12376
in process 11812
-->exec done: 102 12376
in process 8664
-->exec done: 103 12376
in process 13008
-->exec done: 104 12376
in process 11812
-->exec done: 105 12376
in process 8664
-->exec done: 106 12376
in process 13008
-->exec done: 107 12376
in process 11812
-->exec done: 108 12376
in process 8664
-->exec done: 109 12376
利用multiprocessing下的Pool可以很方便的同時自動處理幾百或者上千個并行操作,腳本的復雜性也大大降低。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态