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

标签 python python-rq

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

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

  1. 我无法让它工作,并且
  2. 我真的想要一个所有当前正在由所有工作人员在所有此连接队列上处理的作业的列表,而不是比来自一个队列的一个作业。

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

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

最佳答案

查看了一些源代码,我想这是你需要的:

enter image description here

还有一件事你应该注意:正在运行的作业的数量等于 rq worker 的数量。因为 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() 

关于python - 从 python-rq 获取*所有*当前工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45667458/

相关文章:

python - 从 Pandas Column 获取每行一个值的列表

python - Cython:LINK: fatal error LNK1104:无法打开文件 'atls.lib'

python - 取消 Python RQ 中已经执行的任务?

python-rq Queue.job_ids 始终为空

python - 捕获 runit 发送的信号 (sv stop <id>)

Python:打印自定义异常时超出最大递归深度

python - 入队调用中的 rq 超时参数不起作用,给出 JobTimeoutException

python - 长时间运行的 Redis 作业能否让出工作人员并自行重新排队?

python rq - 如何在完成多个其他作业时触发作业?多工作依赖工作?

python - 径向基函数库