2017-06-07 4 views
1
#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 +フラスコ内で実行することはできません。コードは()

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

結果は「アプリのUNN前に」印刷されません。印刷コードをどのように実行できますか?私はあなたがそれをGunicornでは不可能だpython main.py

でこのアプリケーションを実行するときにトリックを行いますbefore_first_requestを試すことができますが実際にはbefore app runを出力しますif __name__ == '__main__'

答えて

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) 
... 
1

の外にプリントを配置したくない場合は

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