CPUの集中処理を行うフラスコのRESTエンドポイントがあり、戻すには数秒かかります。多くの場合、このエンドポイントが呼び出され、クライアントによってアボートされます。このような状況では、処理をキャンセルしたいと思います。どのように私はフラスコでこれを行うことができますか? Node.jsので処理を中止する要求が中止された場合はフラスコのルート
、私のようなものだろう:私は中に特定の時点で確認することができると似たような、または同期メソッド(request.isClosedを())を持つようにフラスコを期待していた
req.on('close', function(){
//some handler
});
を私の処理とそれが閉じている場合は戻ってきますが、見つけられません。
私は、接続がまだ開いていることをテストするために何かを送信し、失敗した場合に例外をキャッチすることを考えましたが、処理が完了して結果を返すまで例外がスローされないように:
An established connection was aborted by the software in your host machine
クライアントがリクエストを中止した場合、どのように処理を中止できますか?
あなたが「クライアントによって中止」何を意味するのに何もゾンビプロセスを?クライアントは接続を終了しようとしますか?または、別のエンドポイントにヒットしますか?私はFlaskを使用してこれを行う方法はないと思っていますが、エンドポイントをコード化して処理を停止できるようにすることは可能ですが(データベースを使用してこれらのタスクを追跡し、停止フラグなど)。 –
彼らは接続を閉じます。私はいくつかのオプション(チェックボックス)を変更するたびにイメージを再生成します:新しいボックスをチェックすると、リクエストが開始されます。最初のリクエストが完了する前にすぐに2番目のボックスをチェックすると、最初のリクエストはキャンセルされます(jqXHR.abort() )新しいオプションで新しいものが作られます。私はクライアントからあなたが示唆したようにいくつかの "wascancelled"ファイル/ DBレコードを書くという余分な要求を発したと思ったが、それは非常に醜いようだ。 PHPにはconnection_aborted()があり、nodejsにはreq.on( 'close')があります。 – Crashthatch
[このメールスレッド](https://groups.google.com/forum/#!topic/modwsgi/jr2ayp0xesk)が興味深いかもしれません。ここでは、WSGIアプリケーションが接続が閉じられたときを検出する方法について説明します。 PHPで 'connection_aborted()'がどのように動作するのかと似ていると思います。単純に呼び出すだけで、接続が閉じられたかどうかを判断することはできません。代わりに、最初にデータを送り返そうとする必要があります(これは[streaming](http://flask.pocoo.org/docs/patterns/streaming/)を使用して取り除くことができます)。 –