【问题标题】:Flask app is not destroyed when server exits? [duplicate]服务器退出时Flask应用程序不会被破坏? [复制]
【发布时间】:2020-10-05 04:05:07
【问题描述】:

我有以下看似简单的问题,但我无法弄清楚。

我在下面做了一个简短的、自包含的例子:

from flask import Flask


class MyFlask(Flask):

    def __init__(self, name):
        super().__init__(name)
        print(f'Initialising Flask app {id(self)}')

    def __del__(self):
        print(f'Deleting Flask app {id(self)}')


if __name__ == "__main__":
    app = MyFlask(__name__)
    app.run(host='0.0.0.0', port=5000, debug=True)

当你运行它时,你会看到 MyFlask 的两个实例被初始化,但只有一个被销毁。我知道为什么会有两次调用 init 方法(Werkzeug 的工作方式),但为什么只有一个被销毁?

请参阅下面的示例输出:

(venv) D:\Onedrive\Documents\Projects\FlaskReloader>python example.py
Initialising Flask app 1944027544880
 * Serving Flask app "example" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
Initialising Flask app 2213899877680
 * Debugger is active!
 * Debugger PIN: 247-475-647
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Deleting Flask app 1944027544880

有什么想法吗?谢谢!

【问题讨论】:

    标签: python flask werkzeug


    【解决方案1】:

    我认为这是由Flask.__del__的覆盖引起的

    __del__ 上调用 super 或不要覆盖

    print(f'Deleting Flask app {id(self)}')
    super().__del__(self)
    

    【讨论】:

    • 覆盖只是为了通过打印信息性消息来演示问题。如果覆盖是问题,它将不会打印任何内容。但是 MyFlask.__del__ 方法被调用一次。
    • @George 我知道,但 Flask.__del__ 没有被调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多