将列表传递给 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]]
…或任何你想要的东西。
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]]
…或任何你想要的东西。