我觉得有点傻,但它似乎不在documentation for RQ。我有一个'失败'队列中有成千上万的项目,我想用Django管理界面清除它。管理界面列出它们,并允许我单独删除并重新排队它们,但我不相信我必须深入到django shell来批量执行它。如何清除队列中的Django RQ作业?
我错过了什么?
我觉得有点傻,但它似乎不在documentation for RQ。我有一个'失败'队列中有成千上万的项目,我想用Django管理界面清除它。管理界面列出它们,并允许我单独删除并重新排队它们,但我不相信我必须深入到django shell来批量执行它。如何清除队列中的Django RQ作业?
我错过了什么?
redis-cli允许FLUSHDB,当我生成bizzallion作业时,对我的本地环境非常有用。
随着工作的Django集成,我会更新。只需增加0.02美元。
的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
,而且似乎不给任何自定义空间。
第二个片段非常庞大,我们无法弄清楚为什么我们在剩余密钥之前会发生内存泄漏。对于任何已经像我一样离职的人(因此无法通过python-rq访问密钥),请使用conn = redis.from_url(redis_url); conn.keys()方法让它们返回删除。 –
@CharlesOffenbacher我不太清楚,如果我理解上面的代码片段。你是说我们需要运行上面的代码片段,但是先运行第二个代码片段,然后运行第一个代码片段?谢谢。 – William
@罗伯特我相信你应该只使用第二个片段。第一个代码片段仅清除跟踪失败作业的列表,而不是自己实际失败的作业。 –
这不会影响非失败的作业吗? – Joe
任何想到在调用flushdb之后重新启动我的django和redis服务器时,为什么现有作业会跳回队列? – andyzinsser
@Joe一般是的,目前的工作将会消失。 –