python 2.6、rabbitmqバックエンド、およびdjangoでcelery2.4.1を使用しています。ワーカーがシャットダウンした場合に、タスクを適切にクリーンアップできるようにしたいと思います。私の知る限り、タスクデストラクタを提供できないので、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で実行してもタスクは強制終了されないため、シェルから手動で強制終了する必要があります。
それで、これが適切な方法ではない場合、タスクを正常にシャットダウンできるようにするにはどうすればよいですか?