2012-11-15 3 views
1

django에서 셀러리를 사용하고 있습니다. 사용자가 실패한 작업을 검사하고, 필요한 경우 실패한 작업 데이터를 수정 한 다음 다시 제출할 수있는 옵션을 제공해야합니다. 이 스레드를 보았습니다 - Celery Storing unrecoverable task failures for later resubmission. 그래서 샐러리는 원래 args 및 작업을 kwargs 저장하지 않으며 우리가 알아서해야합니다. 그렇게하는 것이 좋습니다. 그러나 체인 "SubTask1 | SubTask2 | SubTask3"을 제출하는 Main Task "MainTask1"이 있고 SubTask2가 실패하면 SubTask3이 실행될 때까지 SubTask3이 실행되지 않을 것입니다. 그러나 최대 재시도 후 SubTask2가 실패하면 SubTask3이 제출되지 않습니다.Celery - 최대 재시도 횟수를 초과 한 후 실패한 작업 체인 다시 제출

내 질문이 있습니다 - SubTask2이 실패하면

  1. , 나는 그의 인수와 kwargs로를 지속 할 수 있습니다. 하지만 체인의 나머지 작업에 대한 정보를 얻으려면 어떻게해야합니까?

  2. 'celery_taskmeta'테이블의 'result'및 'meta'열에 정확히 저장되는 내용은 무엇입니까?

  3. celery_tasksetmeta 테이블은 언제 채워 집니까?

감사합니다,

답변

2
  1. 당신은 그것에 대한 결과를 (예를 들어 AsyncResult(id).ready, http://docs.celeryproject.org/en/latest/reference/celery.result.html 참조)를 사용할 수 있지만이 결과를 검색 할 수 있습니다 하나의 프로세스 만 이후 AMQP 백엔드 안정적으로 수행 할 수 없습니다.

  2. 백엔드 APi에 사용 된 이름은 일관성이없고 구형입니다. 이것은 용어가 시간이 지남에 따라 상당히 진화하여 백엔드가 셀러리 0.1 이후 거의 후방 호환이 가능하기 때문에 입니다. 처음에는 작업이 성공 또는 실패했을 때만 데이터를 저장했습니다. 이 필드는 statusresult입니다. 결국에는 작업이 진행됨에 따라 업데이트되는 임의의 상태를 지원하도록이 작업을 확장하는 것이 쉽다는 것을 깨달았습니다. 이는 이미 존재했던 것 이상으로 구현되었습니다.

    결과 필드는 작업이 성공 작업의 반환 값, 또는이 실패했을 경우의 작업에서 제기 된 예외를 포함합니다. 사용자 지정 상태는 임의의 데이터를이 필드에 저장할 수 있으므로 새로운 용어에서는 작업 상태에 정보가 첨부 될 수 있으며이 상태가 저장됩니다.

    메타 필드는 나중에 새 필드를 추가하는 데 지쳐 있었기 때문에 (사용자가 스키마를 마이그레이션해야했기 때문에) 나중에 추가되었습니다. 인덱싱 할 필요가없는 새로운 필드에 사용되었으며 현재는 children 만 보유하고 있습니다. 속성 (작업에 의해 시작된 하위 작업 아이디의 목록)

    언젠가는 이것을 정리할 수 있기를 바랍니다. 다른 '성장통'의 대부분은 이미 이전에 이미 리팩토링되었지만 그 결과 백엔드는 여전히 남아 있습니다. 당신은 단지 그룹 ID를 유지하여 그룹의 작업 ID의 목록을 얻을 수 있도록

  3. GroupResult.save (이전 TaskSetResult)가, 나중에 검색을 위해 그룹 결과 를 저장하는 데 사용됩니다. 이 기능은 Redis 결과 백엔드가 현재 코드를 구현하는 데에만 사용됩니다. 많은 작업이있는 그룹에서는별로 효율적이지 않으므로 나중에 변경 될 예정입니다.저장 옵션은 사용자 요청에 의해 구현되었지만이를 포함하는 것이 좋지 않은 선택이라고 생각합니다. 사용자가 (작업 인수/kwargs를 저장하는 것과 같이)하는 것이 좋습니다.

+0

감사합니다. 나는 백엔드를 위해 amqp를 사용한다. 지금은 체인 프리미티브를 사용하지 않기로 결정했습니다. 대신 각 작업을 통해 다음 작업을 제출함으로써 체인을 시뮬레이션합니다. 나는 결과 테이블에서 데이터를 un-pickling함으로써 컬럼 결과와 메타의 사용을 알았다. – ksrini

+0

@ 스리 니, 샐리의 창조자로부터 대답을 얻었습니다 :) – Pol

+0

@ 폴, 그렇습니다. :) – ksrini