【问题标题】: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 -9SIGINT,对应于按下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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多