首页 > 解决方案 > 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

标签: pythonstringintmultiprocessingtypeerror

解决方案


pool.map自动将可迭代参数的每个项目映射到函数,因此您无需手动执行 ( for i in profile) - profile已经是您感兴趣的项目。函数描述中的相关行:

此方法将可迭代对象分割成多个块,将它们作为单独的任务提交给进程池。

因此,在您的情况下,您的testing功能将如下所示:

def testing(profile):
    print "Hey " + str(profile["firstName"]) + "!"

推荐阅读