IPythonParallel:并行映射中缺少Dict文本

2024-04-24 08:52:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了这样一个问题:ipyparallel dict中涉及的任何map文本都丢失了,并且在输出结果中变成了{}。你知道吗

这个问题不会影响通过update方法和dict构造函数添加的dict项。你知道吗

为了重现这个问题,您可以使用名为direct viewdview来启动集群。下面的代码在IPython和python3.4(客户端和引擎)中进行了测试。你知道吗

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

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

同样的问题在以下情况下也会发生:

  • 正规函数声明
  • Dict literal用作中间值(甚至用作update的参数)

Tags: 方法代码引擎文本view客户端mapipython
1条回答
网友
1楼 · 发布于 2024-04-24 08:52:24

不确定这是否适用于python3.4问题,但是当我在python2.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

相关问题 更多 >