2013-03-17 4 views
2

저는 Python의 itertools를 통해 많은 제품 목록을 생성하는 프로그램을 가지고 있습니다. 기본적으로 단어의 다양한 조합의 큰 세트. products() 함수를 통해 실행할 여러 세트가 있습니다. 제가하고 싶은 것은 Celery가 각 세트에 다른 Celery Task를 부여한 다음,이를 결국 결합하는 것입니다. 나의 이해는 화음이 이것을하는 방법이다.Django Celery Chord Not Execution

callback = tabulate_results.subtask() 
header = [] 
for combo in combos_to_run: 
    header.append(run_product.subtask(args=(object_terms, combo))) 
result = chord(header)(callback) 
result.get() 

그리고 두 개의 지원, 제거 다운 기능 :

그래서 기본적으로 나는이가 처음에

from celery import subtask, chord 
@task() 
def run_product(object_list, combo_set): 
    results = [] 
    for result in product(object_list, *combo_set): 
     results.append(result) 
    return results 

@task() 
def tabulate_results(result_sets): 
    master_set = [] 
    for result_set in result_sets: 
     master_set.extend(result_set) 

    return master_set 

을, 현 작업은 celeryev에 표시했지만, 나는이 있었다 여기에서 참조 된 문제는 Django Celery - Missing something but I have no idea what? Have results but can't get them인데, Celery에 대한 내용은 MySQL을 통해 결과 추적과 관련된 오류를 반환합니다. 내 결과 백엔드에 실제로 MySQL을 사용하고 있었고 Redis로 전환하여 제거했습니다. 그러나 이제는 새로운 문제가 생겼습니다. 내가 장고 쉘을 통해 코드를 실행하면 아무 작업 celeryev에 나타납니다, 아무것도이 넘어 반환되지 않습니다 :

R IS: <GroupResult: 9f658e8d-591f-4fa9-9e79-4db0c51e8331 [9b199d1e-061f-413c-9521-4a3051dd121a, 2effbfb5-c9dc-4569-a63f-656c233a9387, 80911a60-6a22-46bb-83a1-d5a84c659794, 70acfa43-8ffe-4bc8-8ff1-1df6def035e1, dd417423-d1f6-44eb-8c4b-2ded40d7614f, fbff8adc-815d-459c-b914-b30528dbbd39]> 

기본적으로 셀러리 메시지를하지만, 데이터가없는. 코드는 결코 반환되지 않으며 커서는 매달려 있습니다. 내가 control-C 명령을 내릴 때 줄 번호는 셀러 리에서 기다리고있는 것으로 보인다. 셀레 리브가 나에게 아무런 일도하지 않기 때문에 나는 무엇을 생각할 수 없다. 나는 다른 작업이 셀레 리브에서 나타나는지 확인했습니다.

셀러 리 작업으로 실행하지 않고도 정상적으로 내 기능을 테스트했으며 정상적으로 돌아 왔습니다.

짧은 버전 내가 셀러리 코드 내 장고 응용 프로그램에 집중 파이썬 작업에 도움을 얻으려고하지만, 그들이 어떤 결과를 반환 할 수 또는 celeryev에 입력하기 나타나지 않습니다. Redis 백엔드. 셀러리 버전 3.0.15. 장고 1.4.

+0

헤더 작업에 대한 시간 제한을 설정하고 [오류 처리] (http://docs.celeryproject.org/en/latest/userguide/canvas.html#error-handling)를 정의 해 보았습니까? – guival

답변

1

첫째, 일반적으로 하나의 작업 (이 이유 하나가 체인 사용한다 하위입니다) 다른 사람의 결과를 기다리고있는 나쁜 연습 간주 - 그에서 제외 source

, 당신이 붙여 넣은 구문 코드가 잘못되었습니다. 관련 링크는 http://docs.celeryproject.org/en/master/getting-started/next-steps.html#chords입니다. 다른 문제들 중에서도 코드는 어떤 작업도 코드로 전달하지 않습니다. 코드는 단순히 그룹으로 처리되는 작업 그룹으로 콜백이 해제됩니다. 화음이이 개 한편으로는 인수 초기 작업 그룹, 및 (쉼표로 구분) 콜백을 소요

>>> from celery import chord 
>>> from proj.tasks import add, xsum 

>>> chord((add.s(i, i) for i in xrange(10)), xsum.s())().get() 
90 

참고에, 상기 문서에서, 여기에 코드에 대한 올바른 구문입니다 다른.

이것은 시작이지만 더 많은 시간을 문서에 쓰는 것이 무엇보다 도움이 될 것 같습니다.

+0

[다른 예제] (http://docs.celeryproject.org/en/latest/userguide/canvas.html#chords)를 살펴보면 형식이 일치합니다. – guival

관련 문제