2013-08-07 14 views
5

Mi sento un po 'stupido per averlo chiesto, ma non sembra essere nello documentation for RQ. Ho una coda "fallita" con migliaia di elementi al suo interno e voglio cancellarla usando l'interfaccia di amministrazione di Django. L'interfaccia di amministrazione li elenca e mi consente di eliminarli e ri-accodarli singolarmente ma non riesco a credere che devo tuffarmi nel guscio del django per farlo alla rinfusa.Come cancellare i lavori di Django RQ da una coda?

Cosa mi è mancato?

risposta

2

Il redis-cli consente FLUSHDB, ottimo per il mio ambiente locale mentre genera lavori di bizzalling.

Con un'integrazione di Django funzionante aggiornerò. Aggiungendo solo $ 0,02.

+0

Non influisce sui lavori non falliti? – Joe

+0

Qualche idea sul perché i lavori esistenti tornerebbero in coda una volta riavviato il mio server django e redis dopo aver chiamato flushdb? – andyzinsser

+0

@Gio in generale sì, i lavori attuali andranno via. –

13

La classe Queue ha un metodo empty() che può essere letta come:

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

Tuttavia, nel mio test, che solo cancellato la chiave lista fallito nel Redis, non le si chiavi di posti di lavoro. Quindi le tue migliaia di lavori occuperebbero ancora la memoria di Redis. Per evitare che ciò accada, è necessario rimuovere i posti di lavoro individuale:

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 

quanto per avere un pulsante nell'interfaccia di amministrazione, che avrebbe dovuto cambiare django-rq/templates/django-rq/jobs.html modello, che si estende admin/base_site.html, e non sembra dare qualsiasi stanza per la personalizzazione.

+0

Questo secondo frammento è enorme, non riuscivo a capire perché stavamo avendo una perdita di memoria con le chiavi rimanenti fino a quel momento. Per chiunque abbia già cancellato i lavori come ho fatto io (e quindi ho perso l'accesso alle chiavi tramite python-rq), usa conn = redis.from_url (redis_url); conn.keys() metodo per riprenderli per la cancellazione. –

+0

@CharlesOffenbacher Non sono sicuro di aver compreso i frammenti sopra. Stai dicendo che dobbiamo eseguire entrambi i frammenti di codice sopra, ma prima esegui il secondo snippet e il primo snippet? Grazie. – William

+0

@Robert Credo che dovresti usare solo il secondo snippet. Il primo frammento di codice cancella solo l'elenco che tiene traccia dei lavori non riusciti, non i veri e propri lavori falliti. –

Problemi correlati