Уведомить задачу сельдерея о завершении работы работника

Я использую celery 2.4.1 с python 2.6, backend rabbitmq и django. Я бы хотел, чтобы моя задача могла правильно очищаться, если рабочий завершает работу. Насколько мне известно, вы не можете предоставить деструктор задачи, поэтому я попытался подключиться к сигналу worker_shutdown .

Примечание: AbortableTask работает только с серверной частью базы данных, поэтому я не могу его использовать.

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()

Однако ловушка выключения никогда не вызывается. Ctrl-C'ing рабочего не убивает задачу, и мне нужно вручную убить его из оболочки.

Итак, если это неправильный способ, как мне разрешить задачи корректно завершать работу?

8
задан dgorissen 15 November 2011 в 15:20
поделиться