celeryでsingletonなタスク
djangoでバッチ処理や非同期処理を組もうとしてceleryを導入。使い方も簡単でとても便利。
が、多重起動されたら困る処理を制限しようとしても、celery自体にはそういう機能がない模様。celeryのcookbookをみると、celery.task.Taskを継承したクラスを自分で作ればいいらしい。でもいちいちclassを定義するのは面倒。
というわけでdecoratorでsingletonなタスクを実現できるようにしてみた。