私はPythonのデコレータに少し問題があります。私はデコレータにfunc
として存続しているように見える最初の呼び出し方の機能、いくつかの理由Pythonのカスタムデコレータがセロリのタスクで動作しない
def decorated(func):
def call_and_update(*args, **kwargs):
# do some stuff here
output = func(*args, **kwargs)
# do more stuff here
return output
return call_and_update
@celery.task
@decorated
def testA():
return "Test A"
@celery.task
@decorated
def testB():
return "Test B"
:私はそうのように設定したシナリオを持っています。例えばので
、私はシェルを起動して実行する場合:
>>> testA()
Test A
>>> testB()
Test A
かを、私はシェルを再起動し、第二の試験で始める場合:
>>> testB()
Test B
>>>> testA()
Test B
私はthis question with a similar issueを見つけましたが、いくつかの答えは、代わりにタスクメソッドの拡張クラスを使用しています。
私が具体的にデコレータと関数でこれを行うには、それを動作させるためのトリックはありますか?
@celery.task
デコレータなしの場合、これらの機能は正常に機能します。具体的には、問題を引き起こしている2つのデコレータの組み合わせです。
ありがとうございます!
セロリタスクデコレータを使用している場合にのみこの現象が発生していますか? –
@ juanpa.arrivillaga correct。 celery.taskデコレータなしでは、関数は正常に動作します。 (私は質問にこれを書き留めます) – CaptainPlanet
これは重複しています。 TLDR: 'functools.wraps()'を使用して、セロリタスクが正しい関数名を記録できるようにします(そうでなければ、あなたのタスクの名前は 'call_and_update'です)。 –