赞
踩
我使用的是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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。