IPython-Parallel:并行映射

时间:2016-04-21 14:10:13

标签: python dictionary ipython ipython-parallel

我遇到了这个问题,即ipyparallel dict中涉及的任何map字面值都缺失,并且在输出结果中变为{}

此问题不会影响通过update方法和dict构造函数添加的dict项目。

要重现此问题,您可以启动一个名为direct view的{​​{1}}群集。下面的代码在IPython中使用Python 3.4(客户端和引擎)进行了测试。

dview

当您希望dview.map(lambda x: {'label': x*2}, range(4)} 键出现在词典中时,它会返回[{}, {}, {}, {}]

在以下情况下也会出现同样的问题:

  • 正常功能声明
  • Dict文字用作中间值(甚至作为label的参数)

1 个答案:

答案 0 :(得分:0)

不确定这是否适用于您的python 3.4问题,但是当我在python 2.7.9上运行您的代码时,map方法会生成异步对象而不是字典。为了使用map方法获取字典,我必须使用列表推导来迭代异步对象。然而,map_sync方法可以正常工作。

如果你想在远程群集上试用它(插入适当的json文件),这是一段代码片段:

from IPython.parallel import Client

c = Client()
dview = c[:]

smap = dview.map_sync(lambda x: {'label': x*2}, range(4))
print(smap) #gives dict

amap = dview.map(lambda x: {'label': x*2}, range(4))
print(amap) #produces async obj

amap_dict = [r for i,r in enumerate(amap)]
print(amap_dict) #gives dict

有关异步对象的更多信息:https://ipython.org/ipython-doc/2/parallel/asyncresult.html#map-results-are-iterable