我目前正在构建我的第一个多处理应用程序。
但是。。它不起作用。我试图删除所有代码以使其变得简单,但我不明白。 这是代码:
itemList = ["Item1", "Item2", "Item3", "Item4", "Item5" ]
def printList(list):
for item in list:
print(item)
if __name__ == '__main__':
#Single-Processing
printList(itemList)
#Multi-Processing
pool = multiprocessing.Pool()
pool.map(printList, itemList)
多数民众赞成在输出应该是(当我不使用多处理运行它):
Item1
Item2
Item3
Item4
Item5
具有多重处理的输出:
I
t
e
m
1...
为什么会这样?我该如何避免呢?
答案 0 :(得分:0)
您没有正确分配遍历列表的责任。您正在调用pool.map
,它会遍历列表并在每个元素上调用printList
,但是printList
希望接收整个列表并遍历列表本身。
其中一个循环必须进行。您可以停止在printList
内进行迭代:
pool.map(print, itemList)
或者您可以停止使用map
:
pool.apply(printList, itemList)
答案 1 :(得分:0)
pool.map
进行迭代;您给它一个可迭代的,就可以了。
您的可迭代项是字符串列表。
可迭代的pool.map
做什么是要对其进行迭代:
for i in iterable:
invoke_in_a_process(func, i)
其中invoke_in_a_process
捆绑了函数和参数数据,并将它们通过池发送给其中一个流程工作者。然后,工作人员实际上做了:
func(i)
将字符串传递给functino。
函数为printList
,字符串为"Item1"
。因此,锻炼:printList
传递此字符串时会做什么?