Sto eseguendo Django + Celery + RabbitMQ. Dopo aver modificato alcuni nomi di attività, ho iniziato a ricevere "Attività non registrata" KeyErrors, anche dopo aver rimosso le attività con questa chiave dalla tabella delle attività periodiche in Django Celery Beat e il riavvio del worker di Celery. Essi persistere anche dopo in esecuzione con l'opzione --purge.
Come posso liberarmi di loro?
risposte:
0 per risposta № 1Per svuotare l'ultima di queste attività, è possibile ri-implementarle con i loro vecchi header di metodo, ma senza logica.
Ad esempio, se hai rimosso il metodo original
e ora stanno ottenendo l'errore
[ERROR/MainProcess] Received unregistered task of type u"myapp.tasks.original"
Ricrea semplicemente il original
metodo come segue:
tasks.py
@shared_task
def original():
# keep legacy task header so that it is flushed out of queue
# FIXME: this will be removed in the next release
pass
Dopo aver eseguito questa versione in ogni ambiente, tutte le attività rimanenti verranno elaborate (e non fare nulla). Assicurati di averli rimossi dal tuo Compiti periodici tabella e che non vengono più richiamati. È quindi possibile rimuovere il metodo prima della prossima distribuzione e il problema non dovrebbe ripetersi.
Questo è ancora una soluzione, e sarebbe preferibile essere in grado di rivedere ed eliminare individualmente le attività.