2014-09-24 4 views
1

저는 장고를 가진 초보자입니다. 셀러리가 설치되어 있습니다.셀러리의 워크 플로우

대기중인 작업이 동 기적 또는 비동기 적으로 처리되는 경우 샐러리의 작동에 대해 혼란 스럽습니다. 대기중인 작업이 이미 처리되고있을 때 다른 작업을 대기시킬 수 있습니까?

답변

2

Celery는 메시지 대기열 시스템에 의해 지원되는 작업 대기열 처리 시스템이며 Celery를 사용하면 작업 완료 프로세스를 차단하지 않는 방식으로 비동기 적으로 작업을 호출 할 수 있으므로 작업을 기다릴 수 있습니다 AsyncResult.get을 사용하여 끝내십시오.

다른 작업은 작업이 처리되는 동안 대기 할 수 있으며 Celery가 둘 이상의 프로세스/스레드 (기본 경우)를 실행하는 경우 작업은 서로 병렬로 실행됩니다.

관련 작업이 올바른 순서로 실행되는지 확인하는 것은 사용자의 책임입니다. A 작업의 출력이 다른 작업의 입력 인 경우 BB 작업을 시작하기 전에 작업 A에서 결과를 가져와야합니다.

셀러리 문서에서 Avoid launching synchronous subtasks을 읽으십시오.

1

셀러리가하는 일에 대해 약간 혼란 스러울 것 같아요.

셀러 리는 실제로 큐에 대한 책임이 전혀 없습니다. 큐 자체에 의해 처리됩니다 - RabbitMQ, Redis 또는 기타. Celery가이 일에 관여하게되는 유일한 방법은 앱 내부에서 호출하여 대기열에 넣기에 적합한 무언가로 작업하도록 직렬화하는 라이브러리입니다. 웹 앱에 의해 수행되기 때문에 앱과 마찬가지로 동기식 또는 비동기식입니다. 일반적으로 프로덕션 환경에서는 여러 프로세스가 사이트를 실행하며 각 프로세스는 동시에 대기열에 배치 할 수 있지만 각 대기열은 조치는 진행 중에 완료됩니다.

셀러리의 핵심은 별도의 작업자 프로세스입니다. 비동기 비트는 다음과 같습니다. 작업자가 웹 앱과 완전히 별도로 실행하고 필요에 따라 대기열에서 작업을 선택합니다. 그들은 처음부터 대기열에 작업을 넣는 과정에 전혀 관여하지 않습니다.

관련 문제