将列表传递给 pool.map() 函数 Python returns 列表中每个项目的每个字符

Passing list to pool.map() function in Python returns each character for each item in the list

Windows 上的 Python 2.7 脚本 运行 没有像我预期的那样输出。

from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool

def function1():
    function1List = ["11" ,'22' , '33']
    return function1List

def function2(passedList):
    for item in passedList:
        print item

list = function1()
#print list    used to verify list

if __name__ == '__main__':
    pool = ThreadPool()
    pool.map(function2, list)
    pool.close() 
    pool.join()

我期待的

11
22
33
44

我实际上得到了什么

1
1
2
2
3
3
4
4

我错过了什么?

map 将每个列表中的一项传递给 function2

然后,在 function2 中,您将迭代该项目,获取字符串的每个字符。

这和你写的完全一样:

values = ["11" ,'22' , '33']
for value in values:
    for item in value:
        print item

那么,你是如何解决的?好吧,这取决于你想要什么。

如果您希望每个任务都获得一个列表项,就像现在一样,您只需更改 function2 以期望:

def function2(item):
    print item

如果你想让每个任务都得到一个列表,你必须把你调用map的东西改成列表的列表。我不确定你想要什么列表,但你可以传递四个单元素列表:

values = [[value] for value in values]

…或一个四元素列表:

values = [values]

… 或两个二元素交错列表:

values = [values[::2], values[1::2]]

…或任何你想要的东西。