gpt4 book ai didi

python - 使用多处理时获取堆栈跟踪的最佳方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:13:14 28 4
gpt4 key购买 nike

我想知道当通过多处理模块执行的函数内部出现异常时获取堆栈跟踪的最佳方法。这是一个例子:

import multiprocessing

def square(x):
raise Exception("Crash.")
return x**2

if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = pool.map_async(square, range(5))
for result in results.get():
print result

打印出来:

Traceback (most recent call last):
File "/extra/workspace/Playground/src/multiproc/multiproc_debug.py", line 11, in <module>
for result in results.get():
File "/extra/Python 2.6/lib/python2.6/multiprocessing/pool.py", line 422, in get
raise self._value
Exception: Crash.

所以没有有用的堆栈跟踪,这很烦人。我目前的解决方案:

import multiprocessing
import traceback

def square(x):
try:
# some more code...
raise Exception("Crash.")
except Exception, exception:
print exception
traceback.print_exc()
raise
return x**2

有没有办法在没有所有样板代码的情况下获得这种行为?如果没有,不包括此功能的原因是什么?

编辑:可以为样板代码使用装饰器,但我不知道标准库中是否包含这样的装饰器?

最佳答案

看起来你应该避免从你的 main 函数中引发异常。相反,您可以捕获它,将其视为返回给主程序的值,然后在那里引发它。 Re-throwing exceptions in Python有更多细节。

关于python - 使用多处理时获取堆栈跟踪的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1881338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com