我有一个我编写的python脚本,它使用atexit.register()运行一个函数来在程序退出时保留一个字典列表。但是,当脚本因崩溃或运行时错误而退出时,此代码也会运行。通常,这会导致数据损坏。
当程序异常退出时,有没有办法阻止它运行?
编辑:澄清一下,这涉及一个使用flask的程序,我试图阻止数据持久性代码在出现错误导致的退出时运行。
答案 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
不漂亮,但很简单; - )