手動のトランザクション管理で Django - Celery タスクを実行したいのですが、アノテーションがスタックしないようです。
例えば
def ping():
print 'ping'
pong.delay('arg')
@task(ignore_result=True)
@transaction.commit_manually()
def pong(arg):
print 'pong: %s' % arg
transaction.rollback()
結果は
TypeError: pong() got an unexpected keyword argument 'task_name'
一方、アノテーションの順序を逆にすると、
---> 22 pong.delay('arg')
AttributeError: 'function' object has no attribute 'delay'
それは理にかなっていますが、良い回避策を見つけるのに苦労しています。Django のドキュメントには、注釈の代替手段については言及されていません。必要がない場合は、各セロリ タスクのクラスを作成したくありません。
何か案は?