【问题标题】:IPython-Parallel: Dict literal missing in parallel mapIPython-Parallel:并行映射中缺少字典文字
【发布时间】:2016-04-21 14:10:13
【问题描述】:

我遇到了这个问题,ipyparallel map 中涉及的任何dict 文字都丢失了,并在输出结果中变成了{}

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

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

dview.map(lambda x: {'label': x*2}, range(4)}

当您希望 label 键出现在字典中时,它将返回 [{}, {}, {}, {}]

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

  • 普通函数声明
  • 用作中间值的字典文字(甚至作为update 的参数)

【问题讨论】:

  • 刚刚意识到:这只能使用远程集群重现。在本地机器上启动ipcluster,它工作正常。即使我在托管控制器的机器上执行ipython 然后rc = Client(),上面的代码也可以正常运行。

标签: python dictionary ipython ipython-parallel


【解决方案1】:

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

如果您想在远程集群上试用,这里有一个代码 sn-p(插入适当的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多