6

ソケット (flask socketio) を使用する python Flask アプリケーションを構築しています。基本的に、クライアントは実行したいコマンドをサーバーに送信します。サーバーはコマンドを実行し、ソケットをクライアント コマンド出力に送信します。

ユーザーからのリクエストを受け付けるハンドラ関数があります。この関数はコマンドを実行し、多くのソケットをクライアントに送り返します。stdout および stderr スレッドを取得するには、スレッドも使用されます。

@socket.on ('run-code')
@authenticated_only
def socket_run_code_request (request):
  # run command
  # emit socket for each line of output

フラスコアプリがデバッグモードの場合、関数内で発行されたソケットは、関数が終了する前にクライアントに到達します (これは望ましいことです)。しかし、デバッグがオフの場合、すべてのソケットは何らかの形でキューに入れられ、関数の終了後に送信されます。サーバーからのリアルタイムの応答はありません。

実行をクリックします->少し待ちます->出力は次のとおりです

それ以外の:

実行をクリックします->ここに出力の一部があります->ここに別の行があります-> ...

Flask docs を読みましたが、デバッグの説明はのとおりです。

デバッグ サポートを有効にすると、コードの変更時にサーバーが自動的に再読み込みされ、問題が発生した場合に便利なデバッガーも提供されます。

Flask にすべてをすぐに送信するように指示する方法、またはこれを解決する方法はありますか? フラスコ用のflask-socketioプラグインに関連している可能性があります

あなたのフィードバックに本当に感謝します:)

4

1 に答える 1

3

私の推測では、問題は標準ライブラリにモンキー パッチを適用していないため、非同期プロセスの監視をサポートするために行っているこれらすべての呼び出しがブロックされていることです。デバッグモードでは、Flask-SocketIO がモンキーパッチを実行します。これがないと Flask リローダーが機能しないためです。

モンキー パッチを適用するには、メインの Python スクリプトの一番上に次を追加します。

from gevent import monkey
monkey.patch_all()
于 2015-05-15T16:51:33.473 に答える