Flask で応答をクライアントに送信してから処理を続行する方法はありますか? 経理の仕事がいくつかありますが、クライアントを待たせたくありません。
これらは実際に私がやりたい非常に高速なことなので、新しいスレッドを作成したり、キューを使用したりすることは、ここではあまり適切ではないことに注意してください。(これらの高速処理の 1 つは、実際にジョブ キューに何かを追加することです。)
私のブログでも同様の問題がありました。新しいコメントが投稿されたときに、コメントを購読しているユーザーに通知メールを送信したかったのですが、コメントを投稿した人がすべてのメールが送信されるのを待ってから応答を得る必要はありませんでした。
これには a を使用しmultiprocessing.Pool
ました。1 人のワーカーのプールを開始し (トラフィックの少ないサイトで十分でした)、電子メールを送信する必要があるたびに、Flask ビュー関数ですべてを準備しますが、最後のsend_email
呼び出しは を介してプールに渡しますapply_async
。
Teardown Callbacksは、あなたが望むものをサポートするように思えます。また、コードの編成を支援するために、 Per-Request After-Request Callbacksのパターンと組み合わせることもできます。
ここでFlask内からセロリを使用する方法の例を見つけることができますhttps://gist.github.com/jzempel/3201722
アイデアの要点 (しゃれた意図) は、長い簿記タスクを @celery.task として定義し、ビュー内から apply_async 1または delay を使用してタスクを開始することです。