我使用Gunicorn服務Django應用程序,它工作正常,直到我將其超時從30秒改爲900000s,我不得不這樣做,因爲我有一個用於獲取上傳大文件的用例並進行處理(在某些情況下,處理時間超過30米),但在此變化之後,Gunicorn在幾個小時後沒有響應,我想問題是在這段時間之後所有工作人員(30歲)都會忙於一些請求,奇怪的是即使我根本沒有運行這麼長的請求,它也發生在django管理員的正常探索中。我想知道是否有辦法監控gunicorn的請求,並看到工作人員忙於處理什麼請求,我想找出讓他們忙碌的請求。我試過--log-file=- --log-level=debug
,但它沒有告訴任何關於請求的信息,我需要更詳細的日誌。Gunicorn沒有迴應
回答
雖然我也在尋找一個很好的答案來看看有多少員工在忙碌,但您正在以錯誤的方式解決這個問題。對於需要這麼長時間的任務,您需要像Celery/RabbitMQ這樣的工作人員異步完成繁重的工作,而您的請求/響應週期仍然很快。
我有我的網站上的腳本,可以採取5+分鐘內完成,這裏是我使用的良好格局:
- 當請求第一次進入時,產卵任務,並簡單地返回接受HTTP 202。其目的是「該請求已被接受處理,但處理尚未完成」。
- 讓您的前端輪詢相同的端點(每隔30秒就足夠了)。只要任務沒有完成,就返回一個202,並返回一個200,以及前端可能需要的任何數據。
對於我的網站,我們想要更新超過10分鐘的數據。我通過Accept-Datetime頭來指示數據的可用年齡。如果我們的本地緩存副本比這個更早,我們會產生任務週期。
不,它不總是很好的解決方案,「通常」它是正確的,但並非總是如此。有時候,邏輯就是讓用戶等待,直到響應已準備就緒(然後需要)並向他顯示響應。在我的情況下,我需要這樣做,這就是爲什麼我在這裏問它(無論如何,我不是那個投下你的答案的人) – Sassan
好吧,當然。我提出的通常只是答案。但你如何「讓用戶等待」?如果他們刷新了會發生什麼?這項工作是否繼續,還是必須重新開始。如果繼續,他們如何獲得狀態更新? – user3681414
我剛剛建立了一個Datadog賬戶。他們與gunicorn整合,可以讓你看到有多少員工忙於免費。 – user3681414
- 1. Gunicorn沒有提供png
- 2. gunicorn:錯誤(沒有這樣的文件)nginx + gunicorn +主管
- 3. 爲什麼gunicorn命令沒有找到gunicorn安裝?
- 4. Django-Gunicorn-Nginx部署沒有通過Nginx
- 5. Gunicorn ImportError:沒有模塊名稱myApp
- 6. gunicorn和django項目(沒有應用程序)
- 7. 配置Gunicorn:沒有指定應用程序模塊
- 8. NSButton沒有迴應
- 9. HttpWebResponse沒有迴應
- 10. Curl沒有迴應
- 11. wxPython沒有迴應
- 12. http沒有迴應
- 13. jQuery沒有迴應
- 14. pythonw.exe沒有迴應
- 15. UITableViewCell沒有迴應
- 16. FBRequestConnection沒有迴應
- 17. WM_KEYDOWN沒有迴應
- 18. Glide.js沒有迴應
- 19. UrlFetch,沒有迴應
- 20. URL.openStream()沒有迴應
- 21. MouseListener沒有迴應
- 22. symfony route沒有迴應
- 23. Java:PropertyChangeListener for JTextArea沒有迴應?
- 24. jQuery沒有迴應:JSFiddle?
- 25. MIFARE CLASSIC沒有迴應
- 26. $ .getJSON沒有得到迴應
- 27. WebGL:gl.getExtension('OES_standard_derivatives')沒有迴應
- 28. Json值沒有迴應
- 29. (myservicename)/cloudapp.net沒有迴應
- 30. ajax呼叫沒有迴應
我的預感是在你的一些請求處理代碼中可能存在死鎖。如果超時30秒,受影響的工人最終會解放。如果超過0.9兆秒,他們實際上不會。 –
我明白了,這就是爲什麼我需要日誌,以瞭解發生了什麼。 – Sassan