使用多处理池时,错误回溯不具有描述性

时间:2015-07-20 16:06:28

标签: python multiprocessing

您好我正在使用python多处理模块,问题是当我从另一个线程中执行的代码中获取错误时,Traceback仅指向multiprocessing/pool.py", line 520而不是导致该错误的行号完全错误。

Traceback (most recent call last):
  File "analyzer.py", line 196, in <module>
    for ret in pool.imap(ProcessRow, rows):
  File "/usr/lib64/python2.6/multiprocessing/pool.py", line 520, in next
    raise value
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

因此,当我调用for ret in pool.imap(ProcessRow, rows):

时,analyzer.py中的第196行

所以它完全没有帮助....任何建议?

1 个答案:

答案 0 :(得分:1)

错误是从ProcessRow()或它调用的某个函数引发的(为什么你的函数是CamelCaseUpper?)。

您没有获得正确的堆栈跟踪,因为异常实际上是从您的代码执行的子进程(因此模块的名称:multi 进程 ing)中获取的,然后再次引发在经理过程中。因此,堆栈跟踪显示为好像它是本地的(虽然它实际上是在子进程中引发的异常)。

处理这个问题的preferred way似乎是在代码分叉中捕获异常并从那里打印出适当的堆栈跟踪。