2012-01-06 4 views
6

저는 Django 프로젝트에서 셀러리를 시작했습니다.이 특정 문제에 다소 매달 렸습니다. 기본적으로 다른 작업자에게 장기 실행 태스크를 배포해야합니다. 이 작업은 실제로 여러 단계로 나뉘며 각 단계는 완료하는 데 상당한 시간이 걸립니다. 따라서 일부 단계가 실패하면 동일한 작업자가 완료된 단계의 결과를 다시 사용하여이 태스크를 재 시도하도록하십시오. 셀러리가 특정 서버에 작업을 배포하기 위해 라우팅을 사용하고 있지만이 특정 문제에 대해서는 아무 것도 찾을 수 없다는 것을 알고 있습니다. 내 중개인으로 RabbitMQ를 사용합니다. 당신은 모든 celeryd 인스턴스를 가질 수같은 작업자를 사용하여 셀러리를 다시 작성하는 방법은 무엇입니까?

답변

11

작업자의 호스트 이름의 이름을 따서 명명 큐에서 소비 :

celeryd -l info -n worker1.example.com -Q celery,worker1.example.com 

worker1.example.com에 호스트 이름을 설정하고 같은 이름의 큐뿐만 아니라 기본 대기열에서 소비됩니다 (celery).

task.apply_async(args, kwargs, queue="worker1.example.com") 

similary가 재시도 직접하기 :

task.retry(queue="worker1.example.com") 

또는 같은 노동자로 재 시도를 직접 :

다음

당신이 사용할 수있는 특정 직원에게 작업을 지시하는
task.retry(queue=task.request.hostname) 
+0

답변 해 주셔서 감사합니다. 나는 이것이 내가 찾고있는 것이라고 생각한다. 우리가 큐 이름을 retry()에 전달할 수 있다는 것을 몰랐지만, 지금은 많은 의미가 있습니다. – dangmai

+0

'celeryd'는'celery worker'를 사용합니다. – user

+0

Windows에서는'% computername %'을, 리눅스에서는'\'hostname \ "를 사용하여 명령 행을 작성하십시오. – ubershmekel

관련 문제