【问题标题】:How can I execute a function when Flask app ends?Flask 应用程序结束时如何执行函数?
【发布时间】:2020-02-15 23:55:30
【问题描述】:
我正在构建一个 Flask 应用程序,并且想知道当用户基本上在结束应用程序时单击“Ctrl + C 或 X”时,我如何告诉它执行一个功能。对于这个例子,假设我只是想让它打开一个文件并向它写“完成”。这可能吗?
【问题讨论】:
标签:
python-3.x
linux
flask
web-deployment
【解决方案1】:
程序终止的方式是通过系统发送的信号。信号的两个示例是SIGKILL,对应于kill -9,SIGINT,对应于按下ctrl + c。
您在 Python 中有一个名为 signals 的内置库,尽管您可以在 Unix/Linux 中使用信号。
只需使用import signals 导入库,然后编写一个简单的回调函数,只要收到注册的信号就会运行。
信号处理函数示例:
def receiveSignal(signalNumber, frame):
print('Received:', signalNumber)
return
注册信号示例
signal.signal(signal. SIGKILL, receiveSignal)
signal.signal(signal.SIGINT, receiveSignal)
现在,每当您的程序收到注册的信号时,就会调用receiveSignal 函数,您可以处理写入文件然后从那里退出的任务。
上面的例子取自 StackAbuse,你可以找到完整的例子here
【解决方案2】:
使用 atexit 来处理这个问题,来自:https://stackoverflow.com/a/30739397/5782985,我对我的代码进行了测试,它有效。
import atexit
#defining function to run on shutdown
def close_running_threads():
for thread in the_threads:
thread.join()
print "Threads complete, ready to finish"
#Register the function to be called on exit
atexit.register(close_running_threads)
#start your process
app.run()