Estoy usando apio 2.4.1 con Python 2.6, el servidor de fondo rabbitmq y django. Me gustaría que mi tarea pueda limpiarse correctamente si el trabajador se cierra. Por lo que sé, no se puede suministrar un destructor de tareas, así que intenté conectarme a la señal worker_shutdown.Notificar la tarea de apio del cierre del trabajador
Nota: AbortableTask solo funciona con el back-end de la base de datos, así que no puedo usar eso.
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()
Sin embargo, nunca se llama al gancho de desconexión. Ctrl-C'ing el trabajador no mata la tarea y tengo que matarlo manualmente desde el shell.
Entonces, si esta no es la forma correcta de hacerlo, ¿cómo puedo permitir que las tareas se apaguen correctamente?
Alguna idea de cómo notificar a la tarea de detener a los trabajadores? –
@RomanPodlinov - mira los documentos de Aplery para '' revoke() '' - opcionalmente puedes enviar una señal que el trabajador puede atrapar para limpiar. – RichVel
No lo entiendo. ¿Se emite alguna señal después de que '--soft-time-limit' ha terminado? ¿Si es así, Cuál? –