【问题标题】:Get *all* current jobs from python-rq从 python-rq 获取 *所有 * 当前工作
【发布时间】:2017-08-14 13:58:08
【问题描述】:

我正在使用 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)

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

【问题讨论】:

    标签: python python-rq


    【解决方案1】:

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

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

    【讨论】:

    • [...] 正在运行的作业的数量等于或小于 rq worker 的数量。
    • 如果你正在寻找排队的工作 ID,你可以去queued_job_ids = registry.get_queue().job_ids
    猜你喜欢
    • 2011-03-17
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2013-05-14
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多