gpt4 book ai didi

Python multiprocessing.Pool map() "TypeError: string indices must be integers, not str"

转载 作者:太空狗 更新时间:2023-10-30 00:56:00 27 4
gpt4 key购买 nike

我正在尝试使用 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 函数的方式才能使其运行?

最佳答案

pool.map() 接受一个可调用对象和一个可迭代对象,然后继续将可调用对象应用于 iterable 中的每个元素。它会将工作分成 block 分配给池工作人员,但该函数一次只会传递一个元素。

你传入了一个字典列表,这意味着每个 process_list() 都被传递了一个字典:

process_list({'letter': 'a'})
process_list({'letter': 'b'})
# etc.

然而,您的代码将 list_elements 视为列表。 for 循环:

for my_dict in list_elements:

而是看到字典键,每个 my_dict 一次绑定(bind)到一个键。对于您的词典,这意味着有一次迭代,并且 my_dict 每次都设置为 'letter'。线路:

my_dict['letter']

然后尝试索引到该字符串,'letter'['letter'] 抛出您看到的异常。

以下作品:

def process_list(list_element):
return list_element['letter']

你会返回一个结果; map() 将所有结果收集到一个新列表中,并在所有工作人员完成后返回该列表。

关于Python multiprocessing.Pool map() "TypeError: string indices must be integers, not str",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com