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

2024-04-28

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

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

  1. 我无法让它发挥作用,并且
  2. 我真的想要一份清单all当前正在处理的作业数量all工人在all该连接的队列而不是one工作来自one queue.

这是我的代码(始终返回 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)

请问是否有人对让上述代码正常工作有任何想法,但更重要的是,有一种方法可以从该连接的所有队列上的所有工作人员获取所有当前作业的列表?


查看了一些源代码,我认为这是您所需要的:

您还应该注意一件事:正在运行的作业的数量等于 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() 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 python-rq 获取*所有*当前作业 的相关文章

随机推荐