块python';在崩溃期间退出?

块python';在崩溃期间退出?,python,flask,Python,Flask,我编写了一个python脚本,它使用atexit.register()运行一个函数,在程序退出时保存一个字典列表。但是,当脚本由于崩溃或运行时错误而退出时,此代码也在运行。通常,这会导致数据损坏 当程序异常退出时,有没有办法阻止它运行 编辑:澄清一下,这涉及到一个使用flask的程序,我试图阻止数据持久性代码在引发错误的出口上运行。单向:在主程序的全局级别: abormal_termination = False def your_cleanup_function(): # Add n

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

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


编辑:澄清一下,这涉及到一个使用flask的程序,我试图阻止数据持久性代码在引发错误的出口上运行。

单向:在主程序的全局级别:

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

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

您不想将
atexit
与烧瓶一起使用。您想要使用它听起来像是专门在寻找
请求\u 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\u finished
的好处是它只有在成功响应后才会触发。这意味着,只要另一个信号中没有错误,您就应该是好的。

请说明“崩溃”、“运行时错误”、“异常”为什么要使用
atexit()
?只需在程序末尾写入数据。当数据到达程序末尾时,它不会退出,它使用的是flask框架,对app.run()的调用在程序末尾。只有当我在命令行上按CTRL-C时,它才会退出。1_-CR:崩溃或运行时错误,我的意思是程序因为出现错误而关闭。@ZauberParacelsus:你是说Flask关闭应用程序,还是Flask本身关闭?好吧,澄清一下,这是一个使用Flask框架的程序。一旦它到达app.run(),它将无限期地继续运行,直到程序退出,通常只有在我在命令行上按CTRL-C强制退出时才会这样做。我不得不怀疑,这是否被视为一种不正常的出口,尽管……这不是“一点点”,这是一个完全不同的宇宙;-)对不起,我对烧瓶一无所知。在这个问题上添加一个
flask
标记,并在顶部说明,在
flask
永远运行代码之后,您无法控制任何事情?这个答案并没有完全满足我的要求,它做了比我想要的更好的事情,并且在程序关闭时不再需要保存数据。“它实际上应该解决我关心的其他一些问题。”ZauberParacelsus很乐意帮忙