mpi4py传递dict对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mpi4py传递dict对象相关的知识,希望对你有一定的参考价值。

#mpiexec -n 3 python pass_dict.py
from mpi4py import MPI
import psycopg2
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

tax_dict={}
if rank == 0:
    tax_files=['2008','2009','2011','2012','2013','2014','2015']
    file_dir='/zhome/nah316/taxonomy/'
    for tax_file in tax_files:
        filename=file_dir + tax_file+'.csv'
        with open(filename,'r') as f:
            temp={}
            for line in f:
                temp_list=[]
                splitted_line = line.split()
                tag=splitted_line[1]
                temp_list.append(tag)
                temp[splitted_line[1]] = temp_list
            tax_dict[tax_file]=temp
else:
    tax_dict=None

comm.bcast(tax_dict, root = 0)

print  '-' * 20, rank , '-'* 30
print tax_dict['2015']['InvestmentSoldNotYetPurchasedRestrictedCost']    

这是我尝试构建字典字典的代码,并在通信器上将其广播到另外两个核心。当我运行它时,我收到错误:

-------------------- 2 ------------------------------
Traceback (most recent call last):
  File "pass_dict.py", line 33, in <module>
    print tax_dict['2015']['InvestmentSoldNotYetPurchasedRestrictedCost']
TypeError: 'NoneType' object has no attribute '__getitem__'
-------------------- 1 ------------------------------
Traceback (most recent call last):
  File "pass_dict.py", line 33, in <module>
    print tax_dict['2015']['InvestmentSoldNotYetPurchasedRestrictedCost']
TypeError: 'NoneType' object has no attribute '__getitem__'
-------------------- 0 ------------------------------
['InvestmentSoldNotYetPurchasedRestrictedCost']

在我看来,传递给除root之外的核心的字典已经失去了作为字典的一些功能。为什么是这样?我应该如何解决这个问题并在根节点上进行传递?

提前致谢!

答案

我对python或mpi4py的了解不多,但我在https://mpi4py.scipy.org/docs/usrman/tutorial.html发现了一些代码,这意味着你需要将comm.bcast的结果分配给其他级别的字典。

代码应该是

tax_dict = comm.bcast(tax_dict, root = 0)

也许这解决了这个问题?

以上是关于mpi4py传递dict对象的主要内容,如果未能解决你的问题,请参考以下文章

在 RedirectToAction 中传递对象

将 'dict' 对象从 Django 模板传递到 Angular 控制器 - 避免 jsonify 和解析

如何在活动和片段之间传递对象

将接口从片段传递到kotlin中的活动

将对象列表传递给片段

将 Google API 客户端对象从活动传递到滑动选项卡片段