Python multiprocessing.Pool map();TypeError:字符串索引必须是整数,而不是str";
我正在尝试使用multiprocessing.Pool对字典列表进行并行处理。下面是一个例子 (请注意:这是一个玩具示例,我的实际示例将对实际字典中的值进行cpu密集型处理) 如果我运行上面的代码,我会得到以下错误:Python multiprocessing.Pool map();TypeError:字符串索引必须是整数,而不是str";,python,multiprocessing,Python,Multiprocessing,我正在尝试使用multiprocessing.Pool对字典列表进行并行处理。下面是一个例子 (请注意:这是一个玩具示例,我的实际示例将对实际字典中的值进行cpu密集型处理) 如果我运行上面的代码,我会得到以下错误: Traceback (most recent call last): File "multiprocess_fail.py", line 13, in <module> letters = pool.map(process_list, my_list)
Traceback (most recent call last):
File "multiprocess_fail.py", line 13, in <module>
letters = pool.map(process_list, my_list)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 250, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib/python2.7/multiprocessing/pool.py", line 554, in get
raise self._value
TypeError: string indices must be integers, not str
回溯(最近一次呼叫最后一次):
文件“multiprocess_fail.py”,第13行,在
字母=pool.map(进程列表、我的列表)
文件“/usr/lib/python2.7/multiprocessing/pool.py”,第250行,在地图中
返回self.map\u async(func,iterable,chunksize).get()
get中的文件“/usr/lib/python2.7/multiprocessing/pool.py”,第554行
提升自我价值
TypeError:字符串索引必须是整数,而不是str
我不知道它指的是什么字符串索引。pool.map
不应该只是在my_list
中的项目(即字典)上迭代吗?我是否必须改变将数据传递给map函数的方式才能使其运行?pool.map()
接受可调用和可调用,然后继续将可调用应用于iterable
中的每个元素。它将把工作划分成块,在工作池中工作,但函数一次只能传递一个元素
您传入了一个字典列表,这意味着每个process\u list()
都传递了一个字典:
process_list({'letter': 'a'})
process_list({'letter': 'b'})
# etc.
但是,您的代码将list\u元素
视为一个列表。用于循环的:
for my_dict in list_elements:
而是查看字典键,每个my_dict
一次绑定到一个键。对于您的字典,这意味着有一次迭代,并且每次都将my_dict
设置为“字母”
。该行:
my_dict['letter']
然后尝试索引到该字符串中,'letter'['letter']
抛出您看到的异常
以下工作:
def process_list(list_element):
return list_element['letter']
您将返回一个结果map()
将所有结果收集到一个新列表中,并在所有工作人员完成后返回该列表。my_dict
是'letter'
对于map
的每次迭代,list_elements
是一个dict
而不是整个列表
def process_list(list_element):
return list_element['letter']