【问题标题】:python-rq Queue.job_ids Always Emptypython-rq Queue.job_ids 始终为空
【发布时间】:2019-01-05 11:59:54
【问题描述】:

我的 rq 任务运行正常,但获得所有作业的函数都不起作用 --

$ pip3 freeze | egrep -i "rq|redis"
redis==2.10.6
rq==0.12.0

$ flask shell
Python 3.6.5 (default, Apr  1 2018, 05:46:30) 
[GCC 7.3.0] on linux
App: app [production]
Instance: .../flask/instance
>>> from redis import Redis
>>> import rq
>>> q = rq.Queue('example-rq', connection=Redis.from_url('redis://'))
>>> job = q.enqueue('app.tasks.example', 100)
>>> job.get_id()
'93c0e279-3ce7-48c6-8f97-ace8a29ada70'
>>> q.job_ids
[]
>>> q.get_job_ids()
[]
>>> q.jobs
[]

示例任务非常基础 --

$ cat app/tasks.py 
from time import sleep
from rq import get_current_job

# duration in second
def example(duration):
    job = get_current_job()
    print("Starting task example " + job.get_id())
    for i in range(duration):
        job.meta['progress'] = 100.0 * i / duration
        job.save_meta()
        if i%5 == 0:
            print(i)
        sleep(1)
    job.meta['progress'] = 100
    job.save_meta()
    print("Completed task example")

可能出了什么问题?顺便说一句,这是在 Ubuntu 18.04 下

【问题讨论】:

    标签: python flask redis python-rq


    【解决方案1】:

    我相信我遇到了和你一样的问题。当您将作业入队时,rq worker 会立即将作业从队列中取出,因此当您调用 q.job_ids 时,它会返回一个空列表,因为不再有任何排队的作业。如果您将 2 个作业连续排入队列,则 rq worker 会将第一个作业从队列中取出,然后您会从后续的 q.job_ids 调用中看到第二个 job_id。

    注意:如果您想获取工作人员正在处理的作业的 job_id,请使用 StartedJobRegistry(请参阅Get *all* current jobs from python-rq

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 2019-07-18
      • 2019-08-18
      • 2011-12-29
      • 2019-07-02
      • 2019-05-04
      • 1970-01-01
      • 2011-05-04
      • 2015-10-29
      相关资源
      最近更新 更多