2014-07-01 3 views
3

파이프 라인에 셀러리를 사용하는 가장 좋은 방법은 TaskA -> TaskB -> TaskC입니까? 제발 투표를 너무 빨리하지 말아라. 나는 샐러리에 대해 아무것도 모른다. 문서는 실제로 실제 적용에서 어떻게해야 하는지를 너무 많이 설명하지 않는다. 나는 당신의 의견에 감사드립니다.파이프 라인에 셀러리 사용

@app.task 
def taskA(t_id): 
    if success: 
     TaskB.delay(t_id) 
    else: 
     ReportError.delay(t_id) 

@app.task 
def taskAA(t_id): 
    if success: 
     TaskB.delay(t_id) 
    else: 
     ReportError.delay(t_id) 

@app.task 
def taskB(t_id): 
    if success: 
     TaskC.delay(t_id) 
    else: 
     ReportError.delay(t_id) 

은 아마 당신은 체인을 사용할 수 있습니다, 다른 덧글 상태로

+0

http://stackoverflow.com/questions/3901101/pythoncelery-chaining-jobs – svvac

+0

사용 셀러리 체인의 사용 가능한 복제 https://celery.readthedocs.org/en /latest/userguide/canvas.html#chains는 이전 댓글의 링크 된 답변에 설명되어 있습니다. –

+0

@MauroRocco 내가 좋아하지 않는 한 가지는 체인이 분기없이 순차적이라는 것입니다. 예를 들어, taskA의 경우 이미지 다운로더와 비디오 다운 로더를 시작해야 할 수도 있습니다. 비디오 다운 로더 후에는 세그너가 필요할 것입니다. 어쩌면 셀러리가 이런 종류의 작업에 적합한 프레임 워크가 아닐까요? 정적으로 시스템의 흐름을 구성하는 방법을 찾고 있는데, taskA에 t_id를 공급할 수 있고 모든 것이 올바르게 작동합니다. –

답변

3

... 작업의 이런 종류의 셀러리를 사용하지 말아야합니다. 자세한 내용은 https://celery.readthedocs.org/en/latest/userguide/canvas.html#chains을 참조하십시오. 과 같이, 원래의 질문을 바탕으로 :

from celery import chain 

ret = chain(taskA.s(), taskB.s(), taskC.s()).apply_async() 

if ret.status == u'SUCCESS': 
    print "result:", ret.get() 
관련 문제