1

特定のビューがユーザーへの応答オブジェクトの送信を終了した後に関数を呼び出そうとしています。そのため、ユーザーは関数が実行されるのを待つ必要がありません。

Django Signals Framework の request_finished を使用しようとしていますが、Django シグナルがコールバックに送信する kwargs で HttpRequest オブジェクトにアクセスする方法がわかりません。

Signal オブジェクトには、リクエストに関する有用な情報が含まれていないようです。

また、これは要求と応答のサイクル外で関数を実行する最良の方法ですか? 現時点では、Celery のような高度なソリューションは使用したくありません。

4

2 に答える 2

1

その信号は、あなたが思っていることをしません。ハンドラー コードからわかるように、request_finishedシグナルはリクエストが処理されたときに送信されますが、ユーザーにレスポンスが返される前に送信されます。そのため、そのシグナルに追加したものはすべて、ユーザーが応答を見る前に発生します。

Web サーバーの仕組みにより、応答がユーザーに返された後にコードを実行する方法はありません。本当に、Celery のようなものを使用するだけです。db テーブルを使用してタスク キューをシミュレートする独自のバージョンを作成し、cron ジョブでテーブルからアイテムを取得することもできますが、かなりの量になります。セロリを使うだけで簡単。

于 2012-12-04T09:24:23.887 に答える