嗨,我正在使用 python 多处理模块,问题是当我从另一个线程中执行的代码中收到错误时,回溯仅指向 multiprocessing/pool.py",第 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'
所以analyzer.py中的第196行是当我在pool.imap(ProcessRow, rows)中调用for ret时:
所以这完全没有帮助......有什么建议吗?
最佳答案
该错误是由 ProcessRow()
或其调用的某个函数引发的(为什么你的函数是 CamelCaseUpper?)。
您没有获得正确的堆栈跟踪,因为异常实际上是从您的代码正在执行的子进程(因此模块的名称:multiprocessing)中腌制出来的,然后再次引发在经理进程中。因此,堆栈跟踪显示得好像它是本地的(虽然它实际上是子进程中引发的异常)。
preferred way处理这个问题的方法似乎是捕获代码 fork 中的异常并从那里打印正确的堆栈跟踪。
关于python - 使用多处理池时错误回溯没有描述性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521227/