如何在执行 time.sleep() 之前让 mpi4py 进程完成打印?

Posted

技术标签:

【中文标题】如何在执行 time.sleep() 之前让 mpi4py 进程完成打印?【英文标题】:How to get mpi4py processes to finish printing before executing time.sleep()? 【发布时间】:2017-04-03 23:35:49 【问题描述】:

当我使用mpiexec -n 5 python mpiTest.py 运行下面的代码时,我希望每个进程都立即打印其消息,然后休眠指定的时间。相反,它的执行就像我将print 命令放在sleep 命令之后一样。为什么会发生这种情况?如何让它按预期运行?

printsleep 命令之间添加MPI.COMM_WORLD.Barrier() 没有帮助。

我在 win10 上使用 MS-MPI。

from mpi4py import MPI
import random
import time

def delayed():
    random.seed()
    sek = random.randint( 1, 5 )
    print( "Delaying for ", sek, " seconds." )
    time.sleep( sek )
    return

delayed()

【问题讨论】:

您可能需要刷新 IO 缓冲区。在print 调用之后尝试sys.stdout.flush() 【参考方案1】:

print 调用之后添加sys.stdout.flush() 可以解决问题,非常感谢! =)

【讨论】:

以上是关于如何在执行 time.sleep() 之前让 mpi4py 进程完成打印?的主要内容,如果未能解决你的问题,请参考以下文章

python中from time import sleep是啥意思

time.sleep()的替代[重复]

如何在不使用 time.Sleep 的情况下等待所有 goroutines 完成?

python如何按规定的时间延迟?

010_装饰器

time.sleep(5) 会让整个程序进入睡眠状态?