在崩溃期间阻止python的atexit?

时间:2013-09-26 00:27:34

标签: python flask

我有一个我编写的python脚本,它使用atexit.register()运行一个函数来在程序退出时保留一个字典列表。但是,当脚本因崩溃或运行时错误而退出时,此代码也会运行。通常,这会导致数据损坏。

当程序异常退出时,有没有办法阻止它运行?

编辑:澄清一下,这涉及一个使用flask的程序,我试图阻止数据持久性代码在出现错误导致的退出时运行。

2 个答案:

答案 0 :(得分:4)

您不希望将atexit与Flask一起使用。你想使用Flask signals.听起来你特意在寻找request_finished信号。

from flask import request_finished
def request_finished_handler(sender, response, **extra):
    sender.logger.debug('Request context is about to close down.  '
                        'Response: %s', response)
    # do some fancy storage stuff.

request_finished.connect(request_finished_handler, app)

request_finished的好处是它只会在成功响应后触发。这意味着只要在另一个信号中没有错误,你应该是好的。

答案 1 :(得分:2)

一种方式:在主程序的全球层面:

abormal_termination = False

def your_cleanup_function():
    # Add next two lines at the top
    if abnormal_termination:
        return

# ...
# At end of main program:
try:
    # your original code goes here
except Exception:  # replace according to what *you* consider "abnormal"
    abnormal_termination = True # stop atexit handler

不漂亮,但很简单; - )