2013-08-07 8 views
5

Ich fühle mich ein bisschen dumm für die Frage, aber es scheint nicht in der documentation for RQ zu sein. Ich habe eine "gescheiterte" Warteschlange mit Tausenden von Elementen darin und möchte sie über die Django Admin-Oberfläche löschen. Die Admin-Oberfläche listet sie auf und erlaubt es mir, sie einzeln zu löschen und neu zu ordnen, aber ich kann nicht glauben, dass ich in die Django-Shell eintauchen muss, um es in großen Mengen zu tun.Wie können Sie Django RQ-Jobs aus einer Warteschlange löschen?

Was habe ich verpasst?

Antwort

2

Der redis-cli erlaubt FLUSHDB, groß für meine lokale Umgebung, wie ich eine bizzallion Jobs erzeuge.

Mit einer funktionierenden Django Integration werde ich updaten. Einfach $ 0,02 hinzufügen.

+0

Wirkt sich dies nicht auf nicht fehlgeschlagene Jobs aus? – Joe

+0

Irgendeine Idee, warum existierende Jobs in die Warteschlange zurückspringen würden, sobald ich meinen django- und redis-Server nach dem Aufruf von flushdb neu starte? – andyzinsser

+0

@Joe im Allgemeinen ja, aktuelle Jobs werden weggehen. –

13

Die Queue Klasse hat eine empty() Methode, wie zugegriffen werden kann:

import django_rq 
q = django_rq.get_failed_queue() 
q.empty() 

aber in meinen Tests, dass nur die ausgefallenen Liste Schlüssel in Redis gelöscht, nicht die Job-Tasten selbst. Ihre Tausenden von Jobs würden also immer noch Redis Speicher belegen. Um zu verhindern, dass nicht passiert, können Sie die Aufträge einzeln entfernen müssen:

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 

Wie für eine Schaltfläche in der Admin-Interface mit, dann würden Sie haben django-rq/templates/django-rq/jobs.html Vorlage zu ändern, die admin/base_site.html erstreckt, und scheint nicht zu geben Jeder Raum zum Anpassen.

+0

Dieser zweite Ausschnitt ist riesig, konnte nicht herausfinden, warum wir bis dahin ein Speicherleck mit übrig gebliebenen Schlüsseln hatten. Für jeden, der die Jobs bereits aus der Warteschlange genommen hat (und somit den Zugang zu den Schlüsseln über python-rq verloren hat), verwende conn = redis.from_url (redis_url); conn.keys() -Methode, um sie zum Löschen zurückzuholen. –

+0

@CharlesOffenbacher Ich bin mir nicht ganz sicher, ob ich die obigen Schnipsel verstehe. Wollen Sie sagen, dass wir beide Codefragmente oben ausführen müssen, aber zuerst das zweite und dann das erste Snippet ausführen? Vielen Dank. – William

+0

@Robert Ich glaube, Sie sollten nur das zweite Snippet verwenden. Das erste Code-Snippet löscht nur die Liste, die fehlgeschlagene Jobs verfolgt, nicht die eigentlichen fehlgeschlagenen Jobs. –