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