传递给Pool map函数时迭代dict.items()会产生奇怪的结果

时间:2015-07-13 15:38:43

标签: python multiprocessing python-multiprocessing

我正在尝试在Python 3中进行一些多处理。在尝试迭代从多处理模块通过Pool.map()方法传递的dict项时,我发现了一些奇怪的东西。

from multiprocessing.pool import Pool

def reduce(lines):
    print(lines[0])

pool = Pool(processes=8)
dataset = [(1, {"foo": "bar"}), (2, {"foo": "bar"})]
print(dataset[0])
a = pool.map(reduce, dataset)

正如您在此处所见,print(dataset[0])将打印:

(1, {'foo': 'bar'})

打印时会打印(行[0]):

1
2

这种行为是正常还是我错过了什么?如果我是,有没有办法绕过它?

1 个答案:

答案 0 :(得分:1)

它的行为应该如此:lines == (1, {"foo": "bar"})linesdataset列表中的 - 它不是列表本身。 pool.map()在这方面表现得像普通地图:

squares = list(map(lambda item: item*item, [1, 2, 3]))
# -> [1, 4, 9]