python多进程子进程不运行问题

precess使用进程池队列管理问题

背景:

在进行视频取帧的过程中,为了加速,用process多进程同时去做,将取到的帧放到队列中,之后会同时有另外的进程同时进行处理。

但是在实际的操作中发现,直接将队列放到参数的位置,所放到进程池中的子线程是不会运行的。

于是上网查找了一些资料,发现要用Manager来管理multiprocessing.Queue,这样线程池中的子线程才会运行。

代码如下:

无法运行的代码:

def x(q):
    print('hello,world')

q = multiprocess.Queue(3)
pool = multiprocess.Pool(3)
for i in range(10):
    pool.apply_async(x, args=(q,))
pool.close()
pool.join()

上面的代码是不会运行的,最主要的原因就是进程中的参数队列在创建的时候没有用Manager进行管理。

改成下面代码就会成功运行

def x(q):
    print('hello,world')

m = multiprocess.Manager()
q = m.Queue(3)
pool = multiprocess.Pool(3)
for i in range(10):
    pool.apply_async(x, args=(q,))
pool.close()
pool.join()

此外我还遇到两种进程池中的进程不执行

  1. pool.apply_async(target, args)中的args参数元祖中,只有一个参数,但是参数后面没有加逗号。
  2. 使用了进程中的event()函数
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值