繁体   English   中英

为什么这个 multiprocessing.Pool 卡住了?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM