Python3 multiprocessing Pool的使用

因为要写的算法里面有可以并行的部分,所以考虑使用多线程或者多进程。在网上看到计算密集型的任务最好还是使用python的多进程,所以先测试一下python3里面的multiprocessing的使用。

因为需要在主进程获得创建的子进程的执行结果,所以使用Queue来进行通信。python3 的multiprocessing 下面有个Queue, 并且multiprocessing 的Manager 里面也有个Queue。使用后者才可以正确运行(我用的版本是python3.6)。创建进程时,将Queue 传入参数args里,子进程完成后,通过put方法将结果保存到里面,主进程在join等待所有子进程结束后通过get方法获取结果。

在使用多进程的时候需要注意,子进程执行的那个函数需要保证能够正确运行。否则在多进程执行的时候,会发现子进程并没有执行完毕,但是主进程已经执行到join方法后面了。因为子进程执行出现错误后会退出,但是是看不到报错的。所以,在使用多进程之前最好先用单个进程跑一遍,保证没有错误再用多进程。

下面是个简单的示例:

from multiprocessing import Pool,Manager

def func(que,i):
    print('sub process running:'+str(i))
    que.put('sub process info:'+str(i))

if __name__ == '__main__':
    process_pool = Pool(4)
    que = Manager().Queue()
    for i in range(4):
        process_pool.apply_async(func,args=(que,i))
    process_pool.close()
    process_pool.join()
    print('sub processes finished')
    for i in range(4):
        print(que.get())

执行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值