我觉得有点愚蠢,但它似乎不在documentation for RQ。我有一个“失败”的队列,其中包含数千个项目,我想使用Django管理界面清除它。管理界面列出了它们并允许我单独删除和重新排队,但我不敢相信我必须潜入django shell来批量执行它。
我错过了什么?
答案 0 :(得分:14)
Queue
类有一个empty()
方法,可以像:
import django_rq
q = django_rq.get_failed_queue()
q.empty()
但是,在我的测试中,只清除了Redis中的失败列表键,而不是作业键本身。所以你的成千上万的工作仍然会占用Redis的记忆。为防止这种情况发生,您必须单独删除作业:
import django_rq
q = django_rq.get_failed_queue()
while True:
job = q.dequeue()
if not job:
break
job.delete() # Will delete key from Redis
至于在管理界面中设置一个按钮,您必须更改django-rq/templates/django-rq/jobs.html
模板,该模板扩展admin/base_site.html
,并且似乎没有任何空间进行自定义。
答案 1 :(得分:2)
redis-cli允许FLUSHDB,非常适合我的本地环境,因为我生成了一个bizzallion工作。
通过工作Django集成,我将更新。只需加0.02美元。
答案 2 :(得分:0)
由于@ augusto-men方法似乎不再起作用,因此这是另一种解决方案:
您可以使用原始连接删除失败的作业。只需遍历rq:job键并检查作业状态即可。
from django_rq import get_connection
from rq.job import Job
# delete failed jobs
con = get_connection('default')
for key in con.keys('rq:job:*'):
job_id = key.decode().replace('rq:job:', '')
job = Job.fetch(job_id, connection=con)
if job.get_status() == 'failed':
con.delete(key)
con.delete('rq:failed:default') # reset failed jobs registry