5

私は、返すのに時間がかかる関数 (sync_files() など) を持つ django Web アプリに取り組んでいます。gevent を使用すると、sync_file() の実行時にアプリがブロックされず、他のクライアントが接続して webapp と正常に対話できます。

私の目標は、webapp を他のクライアントに応答させ、ブロックしないようにすることです。無数のユーザーが私の webapp に接続することは期待していません (おそらく最大 20 接続)。これを次の Twitter に設定したくありません。私のアプリは vps で実行されているため、軽量なものが必要です。

上記の私の場合、geventを使用しているときにセロリを使用するのは冗長ですか? セロリを使用する特定の利点はありますか? セロリは私のマシンで実行される別のサービスであるため、使用したくありません。

編集:セロリがgeventでワーカープールを実行できることがわかりました。gevent とセロリの関係については、もう少し確信が持てないと思います。

4

1 に答える 1

6

要するに、セロリが必要です。

gevent を使用して同時実行性がある場合でも、問題はリクエスト タイムアウトになります。タスクの実行に 10 分かかるとしますが、通常の要求タイムアウトは最大で約 1 分です。したがって、ビュー内で直接タスクをトリガーするとどうなるかというと、サーバーが処理を開始しますが、1 分後にクライアント (ブラウザー) はサーバーがオフラインであると見なして接続を切断する可能性があります。その結果、接続が閉じたときに何が起こるか保証できないため、データが破損する可能性があります。Celery は、ビューとは無関係にタスクを処理するバックグラウンド プロセスをトリガーするため、これを解決します。したがって、ユーザーはすぐにビューの応答を取得し、同時にサーバーはタスクの処理を開始します。これは、多くの処理が必要なシナリオを処理するための正しいパターンです。

于 2013-09-24T22:07:24.787 に答える