您好我正在使用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):
所以它完全没有帮助....任何建议?
答案 0 :(得分:1)
错误是从ProcessRow()
或它调用的某个函数引发的(为什么你的函数是CamelCaseUpper?)。
您没有获得正确的堆栈跟踪,因为异常实际上是从您的代码执行的子进程(因此模块的名称:multi 进程 ing)中获取的,然后再次引发在经理过程中。因此,堆栈跟踪显示为好像它是本地的(虽然它实际上是在子进程中引发的异常)。
处理这个问题的preferred way似乎是在代码分叉中捕获异常并从那里打印出适当的堆栈跟踪。