app.run()之前的代码无法在gunicorn + flask中运行

时间:2017-06-07 07:13:01

标签: flask gunicorn

#main.py
from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':    
    print("before app run")
    app.run()  # , threaded=True host='0.0.0.0', debug=True, port=5000

运行gunicorn如下:

gunicorn -b 0.0.0.0:8000 --preload main:app

结果不会打印“app unn之前”。我该如何运行打印代码?如果我不想在if __name__ == '__main__'

之外放置印刷品

2 个答案:

答案 0 :(得分:1)

实际上,当您使用before app run

运行此应用程序时,将会打印python main.py

虽然你可以尝试before_first_request来完成这个伎俩,但Gunicorn是不可能的

@app.before_first_request
def execute_this():
    print("before app run")

答案 1 :(得分:1)

Gunicorn没有运行该文件,但import正在运行它。这意味着__name__ != "__main__"和您的代码永远不会运行。

Gunicorn在导入文件后手动调用app.run()

解决方案是确保您的代码在导入时运行:

> cat main.py
from flask import Flask

app = Flask(__name__)

print "before main stanza"
if __name__ == "__main__":
    print "in main stanza"
    app.run()

然后运行应用程序:

> gunicorn -b 0.0.0.0:8000 --preload main:app
before main stanza
[2017-06-07 08:33:15 +0100] [8865] [INFO] Starting gunicorn 19.7.1
[2017-06-07 08:33:15 +0100] [8865] [INFO] Listening at: http://0.0.0.0:8000 (8865)
...
相关问题