我正在尝试在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
这种行为是正常还是我错过了什么?如果我是,有没有办法绕过它?
答案 0 :(得分:1)
它的行为应该如此:lines == (1, {"foo": "bar"})
即lines
是dataset
列表中的项 - 它不是列表本身。 pool.map()
在这方面表现得像普通地图:
squares = list(map(lambda item: item*item, [1, 2, 3]))
# -> [1, 4, 9]