从python-rq获取*所有*当前工作

时间:2017-08-14 04:24:49

标签: python python-rq

我使用python-rq来管理基于Redis的作业,我想确定我的工作人员当前正在处理哪些作业。

python-rq提供get_current_job函数来查找当前作业'连接但是:

  1. 我无法使用此功能,
  2. 我真的想要所有工作人员当前正在处理的所有工作的所有列表所有此连接的队列而不是来自一个队列的一个作业。
  3. 这是我的代码(总是返回None):

    from rq import Queue, get_current_job
    redis_url = os.getenv('REDIS_FOO')
    parse.uses_netloc.append('redis')
    url = parse.urlparse(redis_url)
    conn = Redis(host=url.hostname, port=url.port, db=0, password=url.password)
    q = Queue(connection=conn)
    get_current_job(connection=conn)
    

    有没有人有任何想法,请让上面的代码工作,但更重要的是,从这个连接获得所有队列中所有工作人员的所有当前工作的列表?

1 个答案:

答案 0 :(得分:8)

查看一些源代码,我认为你需要的是:

enter image description here

还有一件事需要注意:正在运行的作业数量等于rq worker的数量。因为工人一次只能处理一份工作。

from rq import Queue
from redis import Redis
from rq.registry import StartedJobRegistry

from jobs import count_words_at_url


redis_conn = Redis()
q = Queue('default', connection=redis_conn)

for i in range(5000):
    job = q.enqueue(count_words_at_url, 'http://nvie.com', ttl=43)

registry = StartedJobRegistry('default', connection=redis_conn)

running_job_ids = registry.get_job_ids()  # Jobs which are exactly running. 
expired_job_ids = registry.get_expired_job_ids()