django-rq和python-rq中的理想工人数量是多少



我有一个关于django-rq的问题。它是pip安装的库,在运行在redis实例上的python-rq之上充当一个小层。目前,我在本地redis实例上使用数据库0的默认队列上运行所有作业。

我通过在默认队列上为x个工作人员运行以下脚本x次来旋转工作人员:

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

我在一台8核/32GB RAM的机器上运行。对于每个传入的请求,都需要一名工作人员来处理作业,在使用OpenCV、Tesseract和其他一些API的后台过程中,这通常需要3到60分钟的时间,并在过程中发出一些HTTP请求。

我如何知道我应该使用的理想数量的rq工人?我正在看行政小组,上面写着8名工人。这是我应该使用的理想员工数量吗?我应该用20吗?100怎么样?

我如何考虑以下变量,以便选择我应该旋转的正确工人数量:

  1. 传入请求数
  2. 每个进程所需的RAM数量
  3. 芯数
  4. 工人可能崩溃的可能性

已经使用RQ大约一年了。

这个答案完全取决于你在跑什么。如果你是CPU/内存密集型计算,你显然不能旋转很多。例如,我做了很多数字运算,所以我在2gbRAMvps上运行了大约2个,有时是3个RQ工作者。我不确定这是否适用于所有人,但运行django RQ worker时,任何工作都会消耗getgo中大约150 MB的RAM。也许我配置错了什么。当它实际处理作业时,有时每个工人的RAM使用量会高达700MB。

如果你打包了太多的作业,你会得到JobFailed错误,但没有明确的原因。由于RQ(异步计算(的性质,除非您投入大量的日志记录或有测量&收集cpu/内存使用情况。或者运行htop并手动查看利用率。

我的建议:

  1. 横向扩展(每个服务器的工作人员较少(而不是纵向扩展(结实的机器,工作人员数吨(
  2. 限制每个作业的执行时间。。100个1分钟的工作胜过1个100分钟的工作
  3. 使用microdict和blist模块进行大型CSV/列表处理。。。它们的RAM/CPU使用效率提高了100倍

最新更新