RQ - 清空和删除队列
8 个回答
1
监控工具 rqinfo
可以清空失败的队列。
只要确保你有一个正在运行的虚拟环境,并且里面安装了 rq
,然后运行以下命令:
$ rqinfo --empty-failed-queue
想了解更多细节,可以查看 rqinfo --help
。
2
下面是如何使用 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)
4
以上提到的解决办法都没用。
出现了“失败的队列没有在队列中注册”的问题。
所以我把所有失败的任务都移动到了默认队列,然后使用了以下命令:
rq empty queue_name --url [redis-url]
13
- 2016 -
现在你可以在命令行中使用 rq 的 empty
选项了:
/path/to/rq empty queue_name
这样你就可以清空任何队列,而不仅仅是失败的那个队列。
48
使用 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。
在任务 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