2016-10-02 4 views
1

튜토리얼을 올바르게 이해했다면 Celery 하위 작업작업과 거의 동일한 API를 지원하지만 다른 기능이나 프로세스로 전달할 수 있다는 장점이 있습니다. 그런 경우라면셀러 리 작업과 하위 작업의 차이점은 무엇입니까?

분명히, 셀러리는 단순히이 하위 대신 하위에 모두 (예를 들어, @app.task 장식이 변환 한 것 기능을 유지하는 대신 작업에작업을를 대체 할 등). 그래서 나는 뭔가를 오해하고 있어야합니다.

작업은 일 수 있습니다. 하위 작업 할 수 없습니까?

셀러리 API가 상당히 변경되었습니다. 내 질문은 버전 3.1 (현재, 최신) 특정 것입니다.

편집 :

내가 워드 프로세서 하위 다른 작업에서 호출하기위한 것입니다라고 알고있다. 제 질문은 셀러리가 작업을 완전히 없애고 하위 작업을 사방에서 사용하지 못하게하는 것입니다. 그들은 작업보다 강력한/엄격하게 더 유연한 것 같다 : 당신이 셀러리 complex workflows를 사용하여 시작할 때

# tasks.py 
from celery import Celery 
app = Celery(backend='rpc://') 

@app.task 
def add(x, y): 
    # just print out a log line for testing purposes 
    print(x, y) 

# client.py 
from tasks import add 
add_subtask = add.subtask() 
# in this context, it seems the following two lines do the same thing 
add.delay(2, 2) 
add_subtask.delay(2, 2) 
# when we need to pass argument to other tasks, we must use add_subtask 
# so it seems add_subtask is strictly better than add 
+0

하위 작업은 작업에서 실행되는 보조 작업이라고 생각합니다. http://stackoverflow.com/questions/6349371/celery-task-that-runs-more-tasks – Hussain

+0

@Hussain 예, 정확합니다. 내 업데이트 된 질문보기 – max

답변

1

당신은 계정에 차이를 취할 것입니다.

서명은() 인자, 키워드 인자, 및 실행이 함수에 전달 또는 직렬화하고 와이어를 통해 전송 될 수 있도록하는 방식으로 단일 작업 호출의 옵션을 래핑합니다.

시그너처는 작업 내에서 작업을 호출한다고 설명하기 때문에 종종 "하위 작업"이라는 별칭이 붙습니다. 또한

:

하위의를, 작업 호출의 서명 주위에 전달하는 데 사용되는 오브젝트

Task 단지입니다 (예를 들어, 네트워크를 통해 그것을 보낼 수)입니다 데코레이터로 포장 된 함수 정의이지만 subtask은 매개 변수가 전달되었지만 아직 시작되지 않은 작업입니다. 네트워크를 통해 직렬화 된 서브 타스크를 전송하거나, 더 많이 사용하면 그룹/체인/코드 내에서 서브 타스크를 호출 할 수 있습니다.

+0

흠, 분명하다. 그러나 나는 아직도 내 원래의 질문에 대한 답을 이해하지 못한다. 태스크보다 엄격하게 더 강력하고 유연한 서브 태스크가 아닌가? 셀러 리에서 개념을 제거하지 않고 하위 작업 만 처리하는 이유는 무엇입니까? 작업과 달리 하위 작업은 전달 될 수 있으며 부분 화 될 수 있으며 복잡한 작업 과정에서 결합 될 수 있습니다. 그럼에도 불구하고 하위 작업에는 작업과 마찬가지로'.delay()'메서드가 있습니다. 하위 작업에서 수행 할 수없는 작업이 있습니까? – max

+0

내가 이해하는 한, 하위 작업은 워크 플로를 구성 할 수 있으므로 더 유연하게 보입니다. 그러나 복잡한 '캔버스'워크 플로우를 사용하지 않는다면 작업 만 할 수 있습니다. 작업은 하위 작업보다 높은 수준의 추상화입니다. 서브 태스크는 직렬화 된 태스크 일뿐입니다. – baldr

+0

작업은 어떻게 더 높은 수준의 추상화입니까? .. 내 이해와 답을 바탕으로 * 작업 *은 하위 작업 *이 할 수있는 작업의 아주 작은 부분을 수행 할 수 있으며 하위 작업은 수행 할 수없는 작업을 수행 할 수 없습니다. 왜 훨씬 더 강력한 객체가 사용하기 쉬울 때, 나는 불구가 된 객체를 사용하고 싶습니까? – max

관련 문제