python - TypeError:字符串索引必须是多处理池的整数
问题描述
我试图弄清楚如何使用多处理,但是下面的代码有问题。运行该pool_testing()
功能时,我得到一个TypeError
. 我尝试更改pool = multiprocessing.Pool()
为pool = multiprocessing.Pool(processes=n)
,但同样的错误。有人可以帮忙吗?
import multiprocessing
profile = [{u'firstName': u'Karen', u'age': 20},
{u'firstName': u'Jon', u'age': 25}]
def testing(profile):
for i in profile:
print ("Hey " + str(i["firstName"]) + "!")
def pool_testing():
pool = multiprocessing.Pool()
pool.map(testing, profile)
pool_testing()
追溯:
File "/System/.../multiprocessing/pool.py", line 567, in get
raise self._value
TypeError: string indices must be integers
解决方案
pool.map
自动将可迭代参数的每个项目映射到函数,因此您无需手动执行 ( for i in profile
) - profile
已经是您感兴趣的项目。函数描述中的相关行:
此方法将可迭代对象分割成多个块,将它们作为单独的任务提交给进程池。
因此,在您的情况下,您的testing
功能将如下所示:
def testing(profile):
print "Hey " + str(profile["firstName"]) + "!"
推荐阅读
- swift - 如何观察继承对象属性的变化并存储以前的值?
- java - Java(对象) - 无法在数组类型 Star[] 上调用 add(Star) - 我不知道我的错误在哪里
- pine-script - 没有在历史柱上获得适当的每日高点和低点
- asp.net-mvc - 为什么我的 MVC RazorView 文本区域在绑定到 VueJS v-model 时被清除?
- ios - Xamarin.Forms iOS:如何制作 PDF 缩略图?
- python - 如何改变 QTableWidget 本身的位置
- docker - 如何将 docker 容器复制到新主机,包括存储的数据?
- angular - 如何从数据库中获取数据到 Angular 的下拉列表中?
- c++ - 通过 ESP01 8266 连接 MQTT
- vue.js - 使用 Vue Router 加载时防止 npm 包名称的简短选项卡标题