首页 > 解决方案 > Python多处理 - 仅返回部分值而不是整个值

问题描述

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

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

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

为什么会发生这种情况,我该如何避免这种情况?

标签: pythonmultithreadingmultiprocessing

解决方案


您未能正确分配迭代列表的责任。您正在调用pool.map,它遍历您的列表并调用printList每个元素,但printList希望接收整个列表并遍历列表本身。

这些循环之一必须去。你可以在里面停止迭代printList

pool.map(print, itemList)

或者您可以停止使用map

pool.apply(printList, itemList)

推荐阅读