簡體   English   中英

mpi4py - 分散和聚集循環的死鎖

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM