2013-08-07 11 views
5

Czuję się trochę głupio, gdy pytam, ale nie wydaje się być w documentation for RQ. Mam "nieudaną" kolejkę z tysiącami elementów i chcę ją wyczyścić za pomocą interfejsu administratora Django. Interfejs administratora wyświetla je i pozwala mi usuwać i ponownie je kolejkować osobno, ale nie mogę uwierzyć, że muszę zagłębić się w powłoce django, aby zrobić to zbiorczo.Jak wyczyścić zadania Django RQ z kolejki?

Co przeoczyłem?

Odpowiedz

2

Redis-cli pozwala FLUSHDB, świetnie się sprawdza w moim lokalnym środowisku, ponieważ generuję zadania bizzallion.

Z działającą integracją Django będę aktualizować. Wystarczy dodać 0,02 USD.

+0

Czy to nie wpłynie na nieudane zadania? – Joe

+0

Jakiś pomysł, dlaczego istniejące zadania powracałyby do kolejki po ponownym uruchomieniu serwera django i redis po wywołaniu flushdb? – andyzinsser

+0

@Joe w ogóle tak, bieżące zadania znikną. –

13

Klasa Queue ma empty() metody, które mogą być dostępne jak:

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

Jednak w moich badań, że tylko wyczyszczone uszkodzonego klucza listy w Redis, a nie klawiszy pracy siebie. Więc twoje tysiące miejsc pracy nadal zajmowałoby pamięć Redisa. Aby temu zapobiec, należy usunąć zadania indywidualnie:

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 

chodzi o przycisk w panelu administratora, trzeba by zmienić django-rq/templates/django-rq/jobs.html szablon, który rozciąga admin/base_site.html, i nie wydaje się, aby dać dowolne pomieszczenie do dostosowywania.

+0

Ten drugi fragment jest ogromny, nie mogliśmy się domyślić, dlaczego do tej pory mieliśmy wyciek pamięci z pozostałymi klawiszami. Dla każdego, kto już usunął zadania takie jak ja (i dlatego stracił dostęp do kluczy za pośrednictwem python-rq), użyj conn = redis.from_url (redis_url); Metoda conn.keys(), aby odzyskać je do usunięcia. –

+0

@CharlesOffenbacher Nie jestem do końca pewien, czy rozumiem fragmenty powyżej. Czy mówisz, że musimy uruchomić oba powyższe fragmenty kodu, ale najpierw uruchomić drugi fragment i drugi pierwszy fragment? Dzięki. – William

+0

@Robert Uważam, że powinieneś używać tylko drugiego fragmentu. Pierwszy fragment kodu usuwa tylko listę, która śledzi nieudane zadania, a nie same nieudane zadania. –

Powiązane problemy