为什么是多处理.水池卡住了



代码:

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次,因此创建了初始池。但并没有从打印(结果(语句执行。

您在对apply_async的调用中错误地传递了参数。参数需要在元组(或者其他序列(中,但您将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)
...

警告多访问.pool对象具有内部资源,需要通过将池用作上下文管理器或手动调用close((和terminate((来正确管理这些资源(与任何其他资源一样(。如果不这样做,可能会导致进程挂起。

相关内容

  • 没有找到相关文章

最新更新