セロリ @task デコレータの後にデコレータを適用しようとしています。
@send_email
@task
def any_function():
print "inside the function"
ドキュメントで推奨されている方法で動作させることができます。つまり、タスク デコレーターの前にデコレーターを配置しますが、この場合、デコレーターでタスク インスタンスにアクセスしたいと考えています。
@send_email はクラスデコレータでなければなりません。これは私が試したものですが、成功しませんでした:
class send_email(object):
''' wraps a Task celery class '''
def __init__(self, obj):
self.wrapped_obj = obj
functools.update_wrapper(self, obj)
def __call__(self, *args, **kwargs):
print "call"
return self.wrapped_obj.__call__(*args, **kwargs)
def run(self, *args, **kwargs):
print "run"
return self.wrapped_obj.__call__(*args, **kwargs)
def __getattr__(self, attr):
if attr in self.__dict__:
return getattr(self, attr)
return getattr(self.wrapped_obj, attr)
callまたは run 関数内の print ステートメントをワーカーまたは呼び出し元に表示することはできません。
クラスベースのタスク定義に頼らずに、セロリのタスクをどのようにデコレートできますか (そのため、デコレータは関数定義の上の @task の上にあります。
助けてくれてありがとう!
ミゲル