写真がアップロードされたときに写真を少し処理するdjangoアプリがあります。この処理には約100msかかります。
私はnginxの背後にあるgunicornで実行されているDjangoを使用しています。
現在、これは同期的に実行されます。これを使用subprocess
して、処理を呼び出し、結果を取得して、HTTPリクエストのフレーム内で結果を返します。
問題は、実際の処理にかかる時間は約100ミリ秒ですが、ビューが戻るまでに数秒かかることがあり、gunicornワーカースレッドが次のようなメッセージでクラッシュすることです。
2012-12-18 15:01:04 [31620] [CRITICAL] WORKER TIMEOUT (pid:31626)
2012-12-18 15:01:05 [31620] [CRITICAL] WORKER TIMEOUT (pid:31626)
2012-12-18 15:01:05 [31957] [INFO] Booting worker with pid: 31957
(ログレベルはDEBUG
、であり、それ以上の出力はありません)。Webサーバー全体がダウンすることがあります。
この問題を軽減する方法はありますか?現在、トラフィックは、処理をキューに入れて非同期で通信することを検討するのに十分な高さではありません(それでも、HTTPリクエストのコンテキスト内でブロックして戻りたいと思います)。
誰かが問題がどこにあるのかについて洞察を与えることができますか?