파이썬 데코레이터에 약간의 문제가 있습니다. 어떤 이유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"
, 내가 먼저 장식의 func
으로 지속 될 것으로 보인다 전화 중 기능 : 나는과 같이 설정 시나리오를 가지고있다.
>>> testA()
Test A
>>> testB()
Test A
를하거나, 내가 쉘을 다시 시작하면 두 번째 테스트 시작 :
그래서 예를 들어, 내가 쉘을 시작하면 실행 내가 this question with a similar issue을 발견
>>> testB()
Test B
>>>> testA()
Test B
하지만, 몇 가지 답변은 대신 작업 메서드에 대한 확장 클래스를 사용하여 돌아갔습니다.
데코레이터 및 함수를 통해이 작업을 구체적으로 수행하려는 경우 작동 시키려면 트릭이 있습니까?
데코레이터가없는@celery.task
이 없으면 기능은 정상적으로 작동합니다. 특히 문제를 일으키는 두 개의 데코레이터의 조합입니다.
감사합니다.
셀러 리 작업 장식을 사용하는 경우에만이 동작이 표시됩니까? –
@ juanpa.arrivillaga correct. celery.task 데코레이터가 없으면 함수는 정상적으로 작동합니다. (이 질문에 유의하겠습니다) – CaptainPlanet
이것은 복제본입니다. TLDR : 셀러리 태스크가 올바른 함수 이름을 기록 할 수 있도록'functools.wraps()'를 사용하십시오 (그렇지 않으면 모든 태스크의 이름은'call_and_update'입니다). –