2016-06-05 3 views
0

Widerruf Ich schrieb ein kleines Python-Skript Sellerie Aufgaben für den Widerruf:richtige Verfahren für programmatisch Sellerie Aufgaben

from mydjangoproj.celery import app 
i = app.control.inspect() 
active = i.active(safe=True) 
reserved = i.reserved(safe=True) 
# Get the uuids for the active and reserved tasks 
revoke_ids_list_a = [task['id'] for (worker, tasks) in active_filtered.iteritems() for task in tasks] 
revoke_ids_list_r = [task['id'] for (worker, tasks) in reserved_filtered.iteritems() for task in tasks] 
# combine them into one big list 
revoke_ids_list = revoke_ids_list_a + revoke_ids_list_r 
# Perform the revoking 
revoked = [] 
for tid in revoke_ids_list: 
    app.control.revoke(tid, terminate=True) 
    revoked.append(tid) 

Es scheint, dass diese Art Werke. Trotzdem bleiben oft Aufgaben übrig, die nicht widerrufen werden, und manchmal muss ich das Skript auch mehrmals ausführen, um alles zu löschen.

Gibt es etwas, das mir fehlt? (Ich weiß, dass das Stoppen des Daemon und die Ausgabe celery -A mydjangoproj purge -f würde es tun, aber ich möchte nicht aus verschiedenen Gründen zu löschen)

Das andere Problem ist, dass nach dem Neustart der Sellerie Daemon und Beat, einige der Aufgaben, die ich glaubte entzogen worden sein, fange an, wieder im Arbeiter zu laufen. Warum ist das?

Antwort