【发布时间】:2014-03-15 01:16:23
【问题描述】:
我正在尝试使用 multiprocessing.Pool 对字典列表进行并行处理。下面是一个例子
(请注意:这是一个玩具示例,我的实际示例将对实际字典中的值进行 cpu 密集型处理)
import multiprocessing
my_list = [{'letter': 'a'}, {'letter': 'b'}, {'letter': 'c'}]
def process_list(list_elements):
ret_list = []
for my_dict in list_elements:
ret_list.append(my_dict['letter'])
return ret_list
if __name__ == "__main__":
pool = multiprocessing.Pool()
letters = pool.map(process_list, my_list)
print letters
如果我运行上面的代码,我会收到以下错误:
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
我不知道它指的是什么字符串索引。 pool.map 不应该只是迭代my_list 中的项目(即字典)吗?我是否必须更改将数据传递给 map 函数的方式才能使其运行?
【问题讨论】:
-
my_dict是'letter'对于map的每次迭代,list_elements是单个dict而不是整个列表