多处理池.map不可为整数,类型不能为“错误列表”

2024-09-29 21:45:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python的multiprocessing.Pool模块进行多处理,但是得到TypeError: list indices must be integers, not str错误:

这是我的代码:

 def getData(qid):
     r = requests.get("http://api.xxx.com/api?qid=" + qid)
     if r.status == 200:
        DBC.save(json.loads(r.text))

 def getAnotherData(qid):
     r = requests.get("http://api.xxxx.com/anotherapi?qid=" + qid)
     if r.status == 200:
        DBC.save(json.loads(r.text))

 def getAllData(qid):
     print qid
     getData(str(qid))
     getAnotherData(str(qid))


 if __name__ == "__main__":
     pool = Pool(processes=200)
     pool.map(getAllData, range(10000, 700000))

运行代码一段时间后(不是立即),将抛出异常

^{pr2}$

怎么了?它是Pool模块的错误吗?在


Tags: 模块代码comapihttpgetifdef
1条回答
网友
1楼 · 发布于 2024-09-29 21:45:26

当工作任务引发异常时,Pool会捕捉到异常,将其发送回父进程,并重新对异常进行评级,但这并不能保留原始的回溯(因此,您只需看到它在父进程中重读的位置,这并不是很有帮助)。猜测一下,DBC.save中的某个东西期望从JSON加载的值是int,实际上是str。在

如果您想看到真正的回溯,import traceback在顶层,并将worker函数的顶层更改为:

def getAllData(qid):
    try:
        print qid
        getData(str(qid))
        getAnotherData(str(qid))
    except:
        traceback.print_exc()
        raise

所以你可以在工作者身上看到真正的回溯,而不仅仅是在父母身上绝育的、几乎毫无用处的回溯。在

相关问题 更多 >

    热门问题