2012-12-20 71 views
3

我有一個django應用程序,它可以在上載時對照片進行一些處理。這個處理大約需要100ms。在django查看崩潰gunicorn工作線程的密集工作

我使用Django,在nginx後面運行gunicorn。

目前這是同步完成的,我用subprocess來調用處理,得到結果並在HTTP請求的框架內返回結果。

的問題是,儘管實際處理只需要〜100ms時,該視圖有時需要許多秒返回,造成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,和我沒有得到進一步的輸出)。有時需要整個網絡服務器。

有什麼辦法可以緩解這個問題嗎?目前流量不足以考慮將處理放在隊列中並異步通信(即使這樣,我們仍然希望阻塞並且仍然在HTTP請求的上下文內返回)。

任何人都可以洞察問題的可能性?

+0

沒有代碼,很難說 - 視圖要麼過早返回,要麼阻塞工作線程返回? – fish2000

+0

另外,你有沒有嘗試用開發服務器(或在不同線程模式下的gunicorn)調用視圖? – fish2000

+0

@ fish2000不知道我是否有任何值得發佈的代碼。這個觀點並沒有過早迴歸我不認爲。 – fredley

回答

0

對於耗時的例程,異步執行是一個很好的解決方案。 Celery庫非常適合這種工作。並且具有相對較低的入門級。

相關問題