【发布时间】:2018-09-28 13:56:15
【问题描述】:
我正在尝试在 Windows 10 上设置多处理池。
基本上一些cpu(在我的例子中是12个)应该从Qin读取并将结果写入Qout。在Qin 中写入'end' 时,该进程应该停止。
由于某种原因,进程挂起。
我开发了一个简单的版本:
from multiprocessing import Pool, Queue, Event
import os,time
def worker( Qin, Qout, event):
time.sleep(5)
while True:
item = Qin.get()
if item == 'end':
event.set()
else:
Qout.put(item)
time.sleep(1)
def manager():
Qin,Qout,event= Queue(), Queue(), Event()
processes = os.cpu_count()
pool = Pool(processes=processes)
for _ in range(processes):
pool.apply_async(worker,args= (Qin,Qout,event,))
for i in range(100):
print(i)
Qin.put(i)
Qin.put('end')
pool.close()
event.wait()
pool.terminate()
return Qout
Qout = manager()
【问题讨论】:
-
如果您在 Windows 上,您需要检查
__main__,否则每个进程都会一次又一次地调用manager... 请参阅 安全导入主模块 在spawn and forkserver start methods 文档中
标签: python windows events multiprocessing pool