Python多重处理-仅返回部分值,而不是整个值

时间:2018-11-29 22:40:32

标签: python multithreading multiprocessing

我目前正在构建我的第一个多处理应用程序。

但是。。它不起作用。我试图删除所有代码以使其变得简单,但我不明白。 这是代码:

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...

为什么会这样?我该如何避免呢?

2 个答案:

答案 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传递此字符串时会做什么?