[英]Why is this multiprocessing.Pool stuck?
代码:
from multiprocessing import Pool
print ('parent')
max_processes = 4
def foo(result):
print (result)
def main():
pool = Pool(processes=max_processes)
while True:
pool.apply_async(foo, 5)
if __name__ == '__main__':
main()
'parent' 被打印 5 次,因此创建了初始池。 但是 print(result) 语句没有执行。
您在调用 apply_async 时错误地传递了apply_async
。 arguments 需要在一个元组(或其他序列,也许)中,但您将5
作为裸数传递。
尝试:
def main():
pool = Pool(processes=max_processes)
while True:
pool.apply_async(foo, (5,)) # make a 1-tuple for the args!
尝试添加with Pool(processes=max_processes) as pool:
with Pool(processes=max_processes) as pool:
while True:
pool.apply_async(foo, 5)
...
警告 multiprocessing.pool 对象具有需要通过将池用作上下文管理器或手动调用 close() 和 terminate() 来正确管理的内部资源(与任何其他资源一样)。 不这样做可能会导致进程挂起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.