簡體   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