2016-11-21 8 views
1

私は次のように、現在発売していますフラスコアプリで働いている:"python -m flask runs"を実行するにはmain関数を実行しますか?

開始コマンドがFLASK_APP__init.py__を指しpython -m flask run、です。

__init.py__は単にFlaskのインスタンスに変数appを設定します。

from .app import get_app 

app = get_app() 

if __name__ == "__main__": 
    # do nothing 
    pass 

私がいずれかを見つけることができなかったにもかかわらず、フラスコは、このモジュールでFlaskセットのグローバルインスタンスを検出し、それらを実行しているように私には思えますこれに関する文書。

フラスコアプリをラップし、ソケットインスタンスを実行する必要があるFlask-SocketIOを統合したいと思います。

from .app import get_app 

app, sio = get_app() # returns a Flask and a SocketIO instance now 

if __name__ == "__main__": 
    sio.run(app) 
    print("Flask-SocketIO server launched") 

しかし、私は、予想される出力を見ることはない、とソケットサーバーが実行されていないようです:ドキュメントから は、私がメインからそれを実行することができるはずと思われます。私にとっては、これはフラスコが主な機能を無視していて、それが見つけたばかりのFlaskインスタンスを起動しているように思えます。

なぜこのようなことが起こっていますか、つまりこれに関するドキュメントがありますか?または、Flask-SocketIOの統合を間違っていますか?

+0

'if __name__ ==" __main __ "'は、そのファイルを実行するときにのみ実行され、他の場所からファイルをインポートするときには実行されません。 'python -m flask'は' app'や 'application'という変数を探します。 'python mymainfile.py'で起動しない理由はありますか? – syntonym

+0

それは私にとって理にかなっています。 Flask-SocketIOのドキュメントには[フラスコ実行の短いパラグラフ](http://flask-socketio.readthedocs.io/ja/latest/#initialization)がありますが、どのように正確に動作するはずです。起動コードは、私が作成しなかったかなり複雑なNodeスクリプトから実行されますが、 'python x.py'を介してその動機を見ることはできません。 –

答えて

2

Flask 0.11と新しいcliを使用している場合は、アプリケーションを実行するために必要なのはflask runです。 Flask-SocketIOはこのコマンドの実装をオーバーライドし、すべてを動作させるために必要な魔法を追加します。

古いFlask 0.11以前の方法でサーバーを起動できるようにしたい場合を除いて、if __name__ == '__main__'ブロックを削除することもできます。

+0

ありがとう、それは欠けている部分でした!私は、フラスコ実行がFlask-SocketIOによって実際に変更されていることを文書のどこにも見ていませんでした。また、それはなぜ以前のフラグ( '--with-threads')が突然動作を停止したのかを説明しています。私はそれを見つけることができなかったので、このフラグがどこに記録されているのか分かりません。 –

+1

@CedricReichenbach Flask-SocketIOをFlaskサーバーで使用するには、いくつかの制限があります。特に、Flaskは通常のサーバで '--with-threads'を使うオプションを提供しますが、Flask-SocketIOを使うとそのオプションは利用できません。 Flask-SocketIOでは、スレッドを有効にする必要があるため、オプションは削除され、スレッドは内部で有効になります。 – Miguel

+0

ああ、そうだ。どうもありがとう! –

関連する問題