进程池 python_Python进程池

在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可以很方便的同时自动处理几百或者上千个并行操作,脚本的复杂性也大大降低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值