我覺得有點傻,但它似乎不在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一般是的,目前的工作將會消失。 –