用 python编写MPI并行计算程序

问题遇到的现象和发生背景

使用mpi4py库
对如下程序进行修改,满足要求:
1、每个rank为 1+ 的进程在收到消息后将随机休眠 10 到 30秒,并且仅在此空闲后才回答。
2、主进程(rank 0)应该按照其他进程的响应顺序接收答案,如后面的运行结果。
3、提示,可以使用 MPI.ANY_SOURCE函数


from mpi4py import MPI

def main():
    """
    主进程(rank 0)向所有其他进程发送问候消息。
     每个其他进程接收消息并立即响应。
    """
    comm = MPI.COMM_WORLD
    rank = comm.Get_rank()
    size = comm.Get_size()

    if rank == 0:
        for ri in range(1, size):
            message = f'Hello from node {rank}'
            comm.send(message, dest=ri, tag=11)
            print(f'Rank {rank}: sent "{message}"')
        for ri in range(1, size):
            message = comm.recv(source=ri, tag=11)
            print(f'Rank {rank}: received "{message}"')
    else:
        message = comm.recv(source=0, tag=11)
        print(f'Rank {rank}: received {message}')
        answer = f'Response from node {rank}'
        comm.send(answer, dest=0, tag=11)
        print(f'Rank {rank}: sent "{answer}"')

if __name__ == '__main__':
    main()
我想要达到的结果

使修改后的程序运行后出现以下结果,写一下注释
以下是可能的答案。 请注意,响应顺序不同于 1、2、3。

root@atolstikov-w10:/# mpiexec --allow-run-as-root -n 4 python3 mpi_1+.py
Rank 0: sent "Hello from node 0"
Rank 0: sent "Hello from node 0"
Rank 1: received Hello from node 0
Rank 1: I'll sleep for 24
Rank 2: received Hello from node 0
Rank 2: I'll sleep for 25
Rank 0: sent "Hello from node 0"
Rank 3: received Hello from node 0
Rank 3: I'll sleep for 11
Rank 3: sent "Response from node 3"
Rank 0: received "Response from node 3"
Rank 1: sent "Response from node 1"
Rank 0: received "Response from node 1"
Rank 2: sent "Response from node 2"
Rank 0: received "Response from node 2"

https://zhuanlan.zhihu.com/p/157804393