RQ - 空&删除队列

时间:2014-07-23 15:48:40

标签: python redis python-rq

我正在使用RQ,我有一个failed队列,其中包含数千个项目,另一个test队列我创建了一段时间用于测试,现在这个队列已空并且未使用。我想知道如何从failed队列中删除所有作业,并完全删除test队列?

对基本问题道歉,但我在RQ docs找不到相关信息,我对Redis和RQ都是新手......提前致谢!

7 个答案:

答案 0 :(得分:30)

使用rq

进行清理

RQ提供了使任何队列为空的方法:

>>> from redis import Redis
>>> from rq import Queue
>>> qfail = Queue("failed", connection=Redis())
>>> qfail.count
8
>>> qfail.empty()
8L
>>> qfail.count
0

如果您仍然存在test队列,则可以执行相同操作。

使用rq-dashboard

进行清理

安装rq-dashboard:

$ pip install rq-dashboard

启动它:

$ rq-dashboard
RQ Dashboard, version 0.3.4
 * Running on http://0.0.0.0:9181/

在浏览器中打开。

选择队列

点击红色按钮“清空”

你已经完成了。

Python函数清除作业

如果你运行的Redis太旧了,它在RQ使用的命令上失败了,你仍然可以成功删除 通过python代码的作业:

代码采用队列名称,其中是作业ID。

Usilg LPOP我们要求一个工作ID。

在作业ID中添加前缀(默认情况下为“rq:job:”),我们有一个键,作业存储在哪里。

在每个键上使用DEL,我们按作业清除数据库作业。

>>> import redis
>>> r = redis.StrictRedis()
>>> qname = "rq:queue:failed"
>>> def purgeq(r, qname):
... while True:
...     jid = r.lpop(qname)
...     if jid is None:
...         break
...     r.delete("rq:job:" + jid)
...     print jid
...
>>> purge(r, qname)
a0be3624-86c1-4dc4-bb2e-2043d2734b7b
3796c312-9b02-4a77-be89-249aa7325c25
ca65f2b8-044c-41b5-b5ac-cefd56699758
896f70a7-9a35-4f6b-b122-a08513022bc5

答案 1 :(得分:6)

- 2016 -

您现在可以使用rq' empty选项表单命令行:

/path/to/rq empty queue_name

所以你可以用它来清空任何队列而不仅仅是失败的队列

答案 2 :(得分:2)

以上解决方案均无效 失败的队列未在队列下注册

所以我将所有失败的作业移到默认队列并使用

rq空queue_name --url [redis-url]

答案 3 :(得分:1)

监控工具rqinfo可以清空失败的队列 只需确保您安装了rq的有效virtualenv,然后运行

$ rqinfo --empty-failed-queue

有关详细信息,请参阅rqinfo --help

答案 4 :(得分:1)

您只需登录Redis并清除所有队列

登录

  

user @ user:〜$ redis-cli

输入此命令并按Enter

  

FLUSHALL

您已经完成

答案 5 :(得分:0)

默认情况下,“ rq”作业以“ rq:job”为前缀。因此,您可以使用以下命令

从redis中删除这些作业:
redis-cli KEYS rq:job:* | xargs redis-cli DEL

答案 6 :(得分:0)

以下是使用django_rq清除失败的作业注册表的方法:

import django_rq
from rq.registry import FailedJobRegistry

queue = django_rq.get_queue("your_queue_with_failed_jobs")
registry = FailedJobRegistry(queue=queue)

for job_id in registry.get_job_ids():
  registry.remove(job_id)