【问题标题】:non blocking way of receiving a pickled item in mpi4py在 mpi4py 中接收腌制项目的非阻塞方式
【发布时间】:2014-07-29 02:55:14
【问题描述】:

是否有任何非阻塞方式可以从另一个进程接收腌制项目。 Irecv 仅适用于 numpy 数组。我想要一个适用于字典的函数。

【问题讨论】:

标签: python mpi


【解决方案1】:

根据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}

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 2022-12-03
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2017-08-31
    • 2019-07-06
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多