[英]mpi4py - deadlock with scatter & gather loop
嗨,我正在使用 mpi4py 來玩 MPI。 我的用例是我有一個 Python 隊列 object 包含要處理的任務,如下所示:
from queue import Queue
my_queue = Queue()
my_queue.put({'task': [1, 2, 3]})
# while True:
if comm.rank == 0:
task = my_queue.get()
else:
task = None
work = comm.scatter(task, root=0)
calc = do_calculation(work) # whatever calculation
result = comm.gather(calc, root=0)
if comm.rank == 0:
print(result)
這工作得很好,如果我繼續追加任務(所以一開始我將 2 個任務放入隊列並復制上面的代碼)它也可以工作。 我現在的目標是讓這段代碼在無限循環中運行,並且無論何時將某些內容放入隊列(即使用單獨的線程等),它都應該被處理(my_queue.get() 應該是阻塞的,所以這不是問題)。
但是當我嘗試將這段代碼包裝在一個無限循環while True:
(見評論)該程序不會產生任何 output 並且只是鎖定(似乎是死鎖)。
我找到了我的問題的答案。 沒有僵局。 代碼運行完美,唯一的問題是標准輸出的緩沖區沒有被刷新。 這導致結果沒有打印到控制台,我假設代碼產生了死鎖。
添加行sys.stdout.flush()
以手動刷新緩沖區會將結果打印到控制台並解決我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.