我正在用python开发多线程应用程序。我有以下情况。
现在,对于这样的设置,我想要一个通用的错误处理程序,该处理程序可以检测任何线程,任何异常的失败并确定要执行的操作。例如,如果我在启动应用程序后按ctrl + c,则主线程死亡,但生产者,使用者线程继续运行。我希望一旦按下ctrl + c,就应该关闭整个应用程序。同样,如果在数据源模块中发生一些DB错误,则生产者线程应该得到通知。
到目前为止,这是我所做的:
我创建了一个ThreadManager类,它的对象被传递给所有线程。我编写了一个错误处理程序方法,并将其传递给
sys.excepthook
。此处理程序应捕获异常,错误,然后应调用ThreadManager类的方法来控制正在运行的线程。这是代码段:class Producer(threading.Thread):
....
def produce():
data = dataSource.getData()
class DataSource:
....
def getData():
raise Exception("critical")
def customHandler(exceptionType, value, stackTrace):
print "In custom handler"
sys.excepthook = customHandler
现在,当生产者类的线程调用DataSource类的getData()时,将引发异常。但是我的customHandler方法从未捕获过此异常。
我想念什么?同样在这种情况下,我还可以采用什么其他策略?请帮忙。感谢您有足够的耐心阅读所有这些内容:)
最佳答案
您需要的是一个装饰器。本质上,您正在修改原始功能,并放入try-except中:
def exception_decorator(func):
def _function(*args):
try:
result = func(*args)
except:
print('*** ESC default handler ***')
os._exit(1)
return result
return _function
如果您的线程函数称为myfunc,则在函数定义上方添加以下行
@exception_decorator
def myfunc():
pass;
关于python - 如何在多线程python应用程序中创建全局错误处理程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13681370/