3

写真がアップロードされたときに写真を少し処理する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リクエストのコンテキスト内でブロックして戻りたいと思います)。

誰かが問題がどこにあるのかについて洞察を与えることができますか?

4

2 に答える 2

0

時間のかかるルーチンについては、非同期実行が適切なソリューションです。Celeryライブラリは、この種の作業に適しています。そして、比較的低いエントリーレベルを持っています。

于 2013-03-13T15:52:53.113 に答える
0

イベントレットスレッドを使用してこれを修正しました。

于 2013-03-13T15:03:02.283 に答える