Sto usando il celenter 2.4.1 con python 2.6, il backend rabbitmq e django. Vorrei che il mio compito fosse in grado di ripulire correttamente se l'operatore si spegne. Per quanto ne so, non è possibile fornire un distruttore per le attività, quindi ho provato ad agganciare il segnale worker_shutdown.Notifica task celeste di spegnimento operaio
Nota: AbortableTask funziona solo con il database back-end, quindi non posso utilizzarlo.
from celery.signals import worker_shutdown
@task
def mytask(*args)
obj = DoStuff()
def shutdown_hook(*args):
print "Worker shutting down"
# cleanup nicely
obj.stop()
worker_shutdown.connect(shutdown_hook)
# blocking call that monitors a network connection
obj.stuff()
Tuttavia, il gancio di arresto non viene mai chiamato. Ctrl-Cing il lavoratore non uccide l'attività e devo ucciderlo manualmente dalla shell.
Quindi, se questo non è il modo corretto per farlo, come posso consentire alle attività di spegnersi con garbo?
Delle idee come comunicare compito di fermare dal lavoratore? –
@RomanPodlinov - guarda i documenti di Celery per '' revoke() '' - puoi facoltativamente inviare un segnale che l'operatore può catturare per ripulire. – RichVel
Non capisco. C'è qualche segnale che viene emesso dopo che '--soft-time-limit' è finito? Se sì, quale? –