python 结束子线程并保证工作完成_python多处理如何在处理结束时杀死侦听器工作线程...

我使用的是pythonmultiprocessing,其中许多工作人员正在执行一项工作,并将其输出排队到侦听器。{cd2>将把它们的输出追加到下面的cd2>数组中:def listener(q):

global data

while 1:

m = q.get()

if m == 'kill':

print('FINISHED')

# Save data to file

break

data = np.column_stack((data, m))

这是主代码

^{pr2}$

process data是一个函数,它将数组放入侦听器从中提取的队列中。问题是,当运行代码时,print('FINISHED')永远不会在填充data时执行,所以我知道listener正在工作。我还收到一个输出警告:FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison

if m == 'kill':

为了调试这个,我注释掉了工人作业的创建,就像下面的代码一样,FINISHED实际上打印出来了,警告消息也消失了。为什么会这样?在data = np.empty([0,6])

manager = mp.Manager()

q = manager.Queue()

pool = mp.Pool(mp.cpu_count())

watcher = pool.apply_async(listener, (q,))

jobs = []

#for i in range(100):

# job = pool.apply_async(process_data, (x1, x2, x3,))

# jobs.append(job)

#for job in jobs:

# job.get()

q.put('kill')

pool.close()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值