Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python multiprocessing.Pool map();TypeError:字符串索引必须是整数,而不是str";_Python_Multiprocessing - Fatal编程技术网

Python multiprocessing.Pool map();TypeError:字符串索引必须是整数,而不是str";

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)

我正在尝试使用multiprocessing.Pool对字典列表进行并行处理。下面是一个例子

请注意:这是一个玩具示例,我的实际示例将对实际字典中的值进行cpu密集型处理)

如果我运行上面的代码,我会得到以下错误:

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']