是否有任何非阻塞方式来接收来自其他流程的腌制商品。 Irecv仅适用于numpy数组。我想要一个适用于字典的功能。
答案 0 :(得分:6)
根据tutorial,看起来irecv()并没有真正实现,所以你必须采取另一种方法:而不是发布接收并使用测试或等待请求准备好,您可以使用Probe来测试是否有等待接收的消息,并在有以下情况时使用(阻塞)接收来获取它:
#!/usr/bin/env python
from mpi4py import MPI
import time
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
if rank == 0:
data = {'a': 7, 'b': 3.14}
time.sleep(3)
comm.send(data, dest=1, tag=11)
elif rank == 1:
while not comm.Iprobe(source=0, tag=11):
print 'rank 1 Doing some work...'
time.sleep(1)
rdata = comm.recv(source=0, tag=11)
print 'rank 1: got ', rdata
跑步给出:
$ mpirun -np 2 ./foo.py
rank 1 Doing some work...
rank 1 Doing some work...
rank 1 Doing some work...
rank 1 Doing some work...
rank 1: got {'a': 7, 'b': 3.1400000000000001}