2

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

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

编辑:为了澄清,这涉及使用烧瓶的程序,我试图防止数据持久性代码在因引发错误而导致的退出上运行。

4

2 回答 2

4

您不想atexit与 Flask 一起使用。您想使用Flask 信号。听起来您正在专门寻找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是它只有在成功响应后才会触发。这意味着只要另一个信号没有错误,你应该是好的。

于 2013-09-26T00:59:41.753 回答
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

不漂亮,但直截了当;-)

于 2013-09-26T00:33:46.270 回答