首页 > 解决方案 > 如何仅为一个 rq 队列启动多个工作人员?

问题描述

我只需要为我的一个队列(下面的“高”优先级)启动多个工作人员。如何在用于启动工作人员的工作人员脚本的上下文中执行此操作?

from config import Config
from redis import from_url
from rq import Worker, Queue, Connection

listen = ['high','mid','low']

conn = from_url(Config.REDIS_URL)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(list(map(Queue, listen)),log_job_description=True,)
        worker.work()

工作脚本本身被一个主管进程调用,该进程为我的每个队列生成 2 个工作实例。


[supervisord]

[program:worker]
command=python -m worker
process_name=%(program_name)s-%(process_num)s
numprocs=2
directory=.
stopsignal=TERM
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
redirect_stderr=true

如果我想让 3 名工人为我的“高”队列做好准备,但只有 2 名工人为“中”和“低”队列做好准备,我该如何实现呢?

我尝试以“突发”模式启动工人,但如果没有足够的工作,这也会杀死工人。我可以接受一种解决方案,它可以像 Burst 一样自动缩放工人,但始终保持至少一个工人活着。

标签: python-3.xpython-rq

解决方案


推荐阅读