進程池和線程池,進程池 python_Python進程池

 2023-11-12 阅读 29 评论 0

摘要:在python中啟動進程是非常耗資源的,有了進程池就可以限制同一時刻運行的進程數,避免程序崩潰。Pool可以提供指定數量的進程供用戶調用,當有新的請求提交到pool中時,如果池還沒有滿,那么就會創建一個新的進程用來執行該請求;但如果池

在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可以很方便的同時自動處理幾百或者上千個并行操作,腳本的復雜性也大大降低。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/173655.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息