我正在使用RQ,我有一个failed
队列,其中包含数千个项目,另一个test
队列我创建了一段时间用于测试,现在这个队列已空并且未使用。我想知道如何从failed
队列中删除所有作业,并完全删除test
队列?
答案 0 :(得分:30)
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/
在浏览器中打开。
选择队列
点击红色按钮“清空”
你已经完成了。
如果你运行的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)
您现在可以使用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)