2016-08-12 5 views
3

작업 생성자가 소비자 (작업자) 이상인 상황에서 셀러리 작업을 만들고 있습니다. 이제는 대기열이 가득 차고 근로자가 FCFS 방식으로 소비하므로 특정 작업 (즉 task_id)을 즉시 실행할 수 있습니까? 예를 들어 대한셀러리 - task_id가 주어지면, 작업을 실행하십시오.

: -

내 작업이 다음과 같은 방식으로 채워진다. [1,2,3,4,5,6,7,8,9,0]. 이제 작업은 0 번째 인덱스에서 가져옵니다. 이제는 작업 8을 실행하려는 상황이 발생합니다. 어떻게해야합니까?

근로자는 그 작업을 실행할 필요가 없습니다 (근로자가 이미 점유되어있는 상황이있을 수 있기 때문에). 응용 프로그램에서 직접 실행할 수 있습니다. 작업이 완료되면 (작업자 또는 응용 프로그램에서 직접 수행) 대기열에서 작업이 삭제됩니다.

(task_id가 주어진 경우) 강제로 작업을 취소하는 방법을 알고 있지만 ID가 부여 된 작업을 어떻게 수행 할 수 있습니까?

+0

난 당신이 ID에 의해 보크 작업과 해결 방법을 사용하고 (하지만 AFAIK이는 [RabbitMQ] 사용할 수 있습니다 (가장 높은 우선 순위로 브로커에 다시 https://github.com/celery을 보낼 수 있다고 생각/celery/issues/2635 # issuecomment-173597053)) –

+0

작업을 취소하면 해당 작업에 전달 된 매개 변수를 가져올 수 있습니까? 그래서 나는 그 작업을 애플리케이션 레벨 자체에서 실행할 수있다. – PythonEnthusiast

+0

나는 task_id에 의해 AsyncResult를 얻을 수 있고 그것으로부터 인수를 얻은 다음 그 작업을 취소하고 새로운 것을 생성 할 수 있다고 생각했다. –

답변

0

주어진 ID의 작업을 어떻게 수행 할 수 있습니까?

짧은 대답은 할 수 없습니다. 셀러리 작업자는 브로커 백엔드에서 작업을 가져옵니다.

왜 안 되니?

셀러리의 제한 사항이 아니라 일반적으로 메시지 대기열 시스템 (MQS)의 특징입니다. MQS의 핵심은 애플리케이션의 구성 요소를 동기화 해제하여 작업자가 작업을 비동기 적으로 실행하는 동안 다른 작업을 수행 할 수 있도록하는 것입니다. 즉, 일단 작업이 보내지면 수정할 수 없습니다 (그러나 아직 시작되지 않은 한 제거 할 수 있음).

어떤 옵션이 있습니까?

셀러리는 더 낮은 v.sys를 처리 할 수있는 몇 가지 옵션을 제공합니다. 높은 우선 순위 또는 단기 및 장기 실행 작업, 작업 제출 시간에서 는 :

  1. Routing - 작업은 다른 근로자로 라우팅 할 수 있습니다. 따라서 작업 8을 제외하고 모두 장기 실행 작업 인 경우 작업 8을 단기 작업을 처리하는 작업자 또는 작업자 세트로 라우트 할 수 있습니다.

  2. Timed execution - 각 작업에 대한 카운트 다운 또는 예상 도착 시간 (짝수)을 지정하십시오. 일부 작업이 나중에 실행될 때, 즉 시스템의 사용량이 적어 질 때까지 지연 될 수 있다는 것을 알고 있으면 좋은 옵션입니다. 따라서 즉시 수행해야하는 작업을 준비 할 수 있습니다.

  3. Task expiry - 콜백으로 만료 카운트 다운 또는 시간을 지정하십시오. 이렇게하면 작업이 할당 된 시간 내에 실행되지 않으면 작업이 취소되고 콜백이 다른 작업 과정을 시작할 수 있습니다.

  4. Check on task results periodically 일정 시간 안에 실행이 시작되지 않으면 작업을 취소하십시오. 이 작업 만료와 다른 점은 작업자가 작업을 큐에서 가져온 후에는 해지 작업 만 수행된다는 것입니다. 큐가 가득차면 사용 사례에 대해 너무 늦게 폐기 될 수 있습니다.결과를 주기적으로 확인하면 시스템에서 다른 작업을 수행하고 대체 작업을 결정하는 다른 구성 요소가 있음을 의미합니다.

+0

작업을 취소하면 해당 작업에 전달 된 매개 변수를 가져올 수 있습니까? 그래서 나는 그 작업을 애플리케이션 레벨 자체에서 실행할 수있다. – PythonEnthusiast

+0

['task_revoked'] (http://docs.celeryproject.org/en/latest/userguide/signals.html#task-revoked) 신호 또는 ['task_revoked'] (http://docs.celeryproject.org/en/latest/userguide/monitoring.html#task-revoked) 이벤트. 세부 사항은 실제로 달성하고자하는 것에 달려 있습니다. – miraculixx

+0

task_id가 주어지면 매개 변수를 태스크에 전달하는 방법이 있습니까? – PythonEnthusiast

관련 문제