簡體   English   中英

django-rq 和 python-rq 中理想的 worker 數量是多少?

[英]What is the ideal number of workers in django-rq and python-rq?

我有一個關於 django-rq 的問題。 它是 pip 安裝的庫,充當 python-rq 之上的一個小層,運行在 redis 實例上。 目前,我在本地 redis 實例上使用數據庫 0 的默認隊列上運行所有作業。

我通過為默認隊列上的 x 個工作人員運行以下腳本 x 次來啟動工作人員:

nohup ~/.virtualenvs/prod/bin/python3 manage.py rqworker default &
nohup rq resume --url="redis://localhost:6379/0"

我在 8 核/32GB RAM 機器上運行。 對於每個傳入請求,工作人員都需要處理該作業,這在后台進程中通常需要 3 到 60 分鍾的時間,該進程使用 OpenCV、Tesseract 和一些其他 API,在此過程中發出一些 HTTP 請求。

我怎么知道我應該使用的 rq worker 的理想數量? 我正在查看管理面板,它說有 8 個工人。 這是我應該使用的理想工人數量嗎? 我應該使用 20 嗎? 100 怎么樣?

我如何考慮以下變量,以便選擇我應該啟動的正確數量的工人:

  1. 傳入請求數
  2. 每個進程所需的 RAM 量
  3. 核心數
  4. 工人可能崩潰的可能性

現在已經使用 RQ 大約一年了。

這個答案完全依賴於你正在運行的東西。 如果你是 CPU/內存密集型計算,你顯然不能旋轉很多。 例如,我做了很多數字運算,所以我在 2gb RAM vps 上運行大約 2 個,有時是 3 個 RQ worker。 我不確定這是否適合所有人,但是運行 django RQ worker w/o worker 做任何事情都會從 getgo 吃掉大約 150mb RAM。 也許我配置錯了。 當它實際處理作業時,有時每個工作人員的 RAM 使用量會高達 700 MB。

如果打包太多作業,則會出現 JobFailed 錯誤,但沒有明確說明原因。 由於 RQ(異步計算)的性質,除非您輸入大量日志記錄或有測量和收集 cpu/內存使用情況的開銷,否則您真的無法分辨。 或者,或者運行 htop 並手動查看利用率。

我的建議:

  1. 水平擴展(每台服務器的工人更少)而不是垂直擴展(帶有大量工人的強大機器)
  2. 限制每個作業的執行時間。100 個 1 分鍾的作業比 1 100 分鍾的作業好
  3. 將 microdict 和 blist 模塊用於大型 CSV / 列表處理......它們在 RAM / CPU 使用方面的效率提高了 100 倍

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM