18

我正在使用RQ,并且我有一个failed包含数千个项目的队列,以及test我为测试创建的另一个队列,该队列现在是空的且未使用。我想知道如何从failed队列中删除所有作业,并完全删除test队列?

为基本问题道歉,但我在RQ 文档中找不到这方面的信息,而且我对Redis和 RQ都是全新的......提前致谢!

4

7 回答 7

45

使用 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。

使用 LPOP,我们要求作业 ID 加一。

将前缀(默认为“rq:job:”)添加到作业 id 我们有一个键,作业存储在哪里。

在每个键上使用 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
于 2014-07-23T16:39:48.500 回答
11

- 2016 -

您现在可以使用 rq 的empty选项形式命令行:

/path/to/rq empty queue_name

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

于 2016-11-30T13:25:15.500 回答
4

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

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

rq empty queue_name --url [redis-url]

于 2020-01-21T09:18:25.307 回答
2

你可以登录redis并清除所有队列

登录

user@user:~$ redis-cli

输入此命令并按回车键

同花顺

你完成了

编辑:这将删除存储在 redis 中的所有内容

于 2019-01-10T06:29:01.823 回答
1

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

$ rqinfo --empty-failed-queue

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

于 2015-03-10T23:04:13.773 回答
1

以下是如何使用以下方法清除失败的作业注册表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)
于 2020-11-18T16:53:37.100 回答
-1

默认情况下,“rq”作业以“rq:job”为前缀。因此,您可以使用以下命令从 redis 中删除这些作业,

redis-cli KEYS rq:job:* | xargs redis-cli DEL
于 2019-12-17T10:58:05.347 回答