Nginx

長時間執行任務的 Nginx 配置

  • January 11, 2016

我有一個基於 Web 的應用程序,可以對使用者送出的文本進行一些語言分析。這是一項相當佔用記憶體的任務,通常需要較長的時間(例如,處理 30 個文件最多需要 3 分鐘)。我正在使用 Django 的 StreamingHttpResponse 函式來完成這項工作,但注意到 nginx 在處理了大約 7 個文件(不到 50 秒)後丟棄了使用者的請求。我嘗試調整 nginx 和 Gunicorn keep_alive 設置,但似乎不起作用。我想知道這裡是否有人可以給我一些指示?

我還想知道解決需要很長時間計算的任務的最佳方法是什麼?非同步?

I'm also wondering what is the best approach to tackle a task that takes a long time to compute? Asynchronously?

這就是工作隊列的用途。您應該考慮將文件的送出與處理分開。讓使用者送出文件,保存它們,將消息添加到工作隊列以處理它們,實際上是非同步的。使用者繼續他們的業務,可能會看到載入螢幕,但它不再與該 Web 會話相關。

與此同時,一個單獨的程序從工作隊列中挑選新任務,獨立處理每個使用者正在做的事情。有很多這樣的排隊系統,比如 Amazon AWS SQS:

https://aws.amazon.com/sqs/

引用自:https://serverfault.com/questions/748100