烧瓶中的全局异常处理程序

问题描述 投票:0回答:1

我是 Flask 和 Python 的新手,所以如果答案很明显,请原谅我。 我的 Flask 应用程序有一个调度程序,它在不同时间打开许多线程,执行特定的不同工作,并在终端上运行一些命令并获取结果。

现在我有点犹豫,如果出现问题并且调度程序无法生成线程或在生产中运行应用程序时出现任何其他问题,该怎么办。我已经做好了尝试捕获,但如果有一天我错过了一个非常重要的问题怎么办?明显的 try catch。我不希望我的应用程序在生产中停止,而是应该记录异常并继续接受请求或调度其他任务,而不停止应用程序主线程。

所以我想实现一个全局异常处理程序,能够捕获任何和所有类型的异常,而不仅仅是 API 异常。

Python 3.8 烧瓶3.0

我尝试添加以下代码,但应用程序在记录后停止,并且如果我的线程出现异常,它无法捕获异常。

def global_exception_handler(exc_type, exc_value, exc_traceback):
    try:
        # Log or handle the exception here
        print(f"##########Global exception handler caught: {exc_value}")
    except Exception as e:
        print(f"##########Global exception unable to handle exception")


sys.excepthook = global_exception_handler

还有这个

@app.errorhandler(Exception)
def handle_exception(error):
    response = jsonify({'message': str(error)})
    response.status_code = 500
    return response

python-3.x flask exceptionhandler uncaughtexceptionhandler
1个回答
0
投票

幸运的是,Python 在处理线程和线程崩溃方面已经做得很好。如果线程崩溃,什么也不会发生,它将记录并继续。当然,如果你打算在它们崩溃时做某事,你应该添加一个 try/ except

尽管如此,我建议的一件事是将线程设置为

daemon
(我不知道为什么它听起来像恶魔🤣)。这将确保所有线程在程序结束时关闭。

抱歉,如果没有更多代码,很难提供更多帮助,因为这取决于线程崩溃时的致命程度

© www.soinside.com 2019 - 2024. All rights reserved.