代码:
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((来正确管理这些资源(与任何其他资源一样(。如果不这样做,可能会导致进程挂起。