2013-06-25 20 views
14

クライアントに応答を送信して何らかの処理を続ける方法がありますか?私はいくつかの書類保管作業をしなければなりませんが、私はクライアントを待たせたくありません。フラスコ終了応答と処理続行

これは実際には本当に速いものですから、新しいスレッドを作成するか、キューを使用することは、ここでは本当に適切ではありません。 (これらの速いものの一つは、実際にジョブキューに何かを追加しています。)

+1

'celery'や他の質問を見てください。http://stackoverflow.com/q/16870858/880326とhttp://stackoverflow.com/q/15969213/880326。 – tbicr

答えて

4

Teardown Callbacksのようなサウンドは、あなたが望むものをサポートします。また、コードの整理に役立つパターンをPer-Request After-Request Callbacksと組み合わせることもできます。

+0

これは私が望むものに最も近いように見えます。それは経路特有ではありませんが、そのパターンはどのように簡単に行うことができるかを示しています。 –

+0

最後に作業コードがありますか? – luckydonald

+1

ちょうどアップデート - これは、フラスコがまだティアダウン機能を待ってから応答をリリースするのを待っているので、質問者が望むものを達成しません。 –

2

はあなたがここにhttps://gist.github.com/jzempel/3201722

フラスコ 内からのアイデアの要旨をセロリの使用方法の例を見つけることができている(しゃれは意図します) @celery.taskという長時間のブック管理タスクを定義し、apply_asyncを使用して1を表示するか、ビュー内からタスクを開始するまでに遅れます。

2

私のブログでも同様の問題がありました。私は新しいコメントが投稿されたときにコメントを購読した人に通知メールを送っていましたが、コメントを投稿した人にすべてのメールが送信されるのを待っていないようにしました。

これにはmultiprocessing.Poolを使用しました。私は1人の作業者のプールを始めました(それは十分なトラフィック量のサイトでした)。そしてメールを送る必要があるたびに、Flaskビュー機能ですべてを準備しますが、最後にsend_emailコールをapply_async経由でプールに渡します。

関連する問題