首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RQ -空队列和删除队列

RQ -空队列和删除队列
EN

Stack Overflow用户
提问于 2014-07-23 15:48:40
回答 8查看 24.1K关注 0票数 19

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

为基本问题道歉,但我在RQ文档中找不到这方面的信息,我对Redis和RQ都很陌生.提前感谢!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-07-23 16:39:48

使用rq进行清理

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

代码语言:javascript
复制
>>> 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-仪表板:

代码语言:javascript
复制
$ pip install rq-dashboard

启动它:

代码语言:javascript
复制
$ rq-dashboard
RQ Dashboard, version 0.3.4
 * Running on http://0.0.0.0:9181/

在浏览器中打开。

选择队列

单击红色按钮“空”

你就完蛋了。

Python函数清除作业

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

代码采用队列的名称,其中有作业ids。

Usilg我们只要求一个人的工作ids。

在作业id中添加前缀(默认情况下为"rq: job :") --我们有一个键,即存储作业的位置。

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

代码语言:javascript
复制
>>> 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
票数 46
EN

Stack Overflow用户

发布于 2016-11-30 13:25:15

-2016年-

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

代码语言:javascript
复制
/path/to/rq empty queue_name

因此,您可以使用它来清空任何队列,而不仅仅是失败的队列。

票数 13
EN

Stack Overflow用户

发布于 2020-01-21 09:18:25

上述解决方案中没有一个未在队列下注册。

因此,我将所有失败的作业移到默认队列中,并使用

rq空queue_name --url redis-url

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24915181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档