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

dia*_*ong 6 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
Run Code Online (Sandbox Code Playgroud)

运行 gunicorn 如下:

gunicorn -b 0.0.0.0:8000 --preload main:app
Run Code Online (Sandbox Code Playgroud)

结果不会打印“before app unn”。我怎样才能运行打印代码?如果我不想在外面打印if __name__ == '__main__'

teh*_*rus 6

Gunicorn 不是运行该文件,而是importing 它。这意味着__name__ != "__main__"您的代码永远不会运行。

app.run()导入文件后,Gunicorn 会手动调用自身。

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

> cat main.py
from flask import Flask

app = Flask(__name__)

print "before main stanza"
if __name__ == "__main__":
    print "in main stanza"
    app.run()
Run Code Online (Sandbox Code Playgroud)

然后运行应用程序:

> 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)
...
Run Code Online (Sandbox Code Playgroud)