当前位置:   article > 正文

python 结束子线程并保证工作完成_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()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/458202
推荐阅读
相关标签
  

闽ICP备14008679号