2011-10-20 3 views
4

셀프가 작업 이름을 기반으로 작업을 라우팅하려고합니다 ... 기본적으로 'worker.some_name'및 'web.some_name'이라는 작업이 있습니다. ', 나는 worker와 web이라는 두 개의 큐를 사용한다. 모든 작업자 작업을 작업자 큐로 보내고 그 반대의 경우도 마찬가지입니다. 현재이 같은 큰 CELERY_ROUTES 사전이 있습니다CELERY_ROUTES - 작업 이름을 기준으로 경로를 지정하는 방법

CELERY_ROUTES = { 
    "web.some_name": { 
     "queue": "web" 
    }, 
    "web.some_other_name": { 
     "queue": "web" 
    }, 
    etc.... } 

을하지만 같은 더 일반적인 뭔가 싶습니다

CELERY_ROUTES = (MyRouter(),) 
class MyRouter(object): 
    def route_for_task(self, task, args=None, kwargs=None): 
     if task.split('.')[0] == "worker": 
      return {"queue": "worker"} 
     return {"queue": "web"} 

을하지만이 작동하지 않습니다. 어떤 아이디어? 감사.

답변

2

교환 유형을 직접 변경해도 원하는대로 할 수 있습니다. 이 방법은 웹으로 작업을 지정할 수 있습니다 * 또는 근로자 *

당신은 여기에서 읽을 수 있습니다.. 당신은했습니다 작업에 "app.task @"데코레이터를 사용해야합니다

+1

그 링크, 댄 언급 한 모든 정보와 heres는 좋은 소스 죽었을 사용하여 작업을 할 수

: http://celery.readthedocs.org/ en/latest/userguide/routing.html # amqp-primer – Tendrid

+0

메시지 브로커처럼 redis와 함께 작동합니까? http://icleery.readthedocs.org/en/latest/userguide/routing.html#manual-routing에서 와일드 카드를 사용하는 수동 라우팅 예와 함께 작동시키지 못했습니다. – odedfos

3

http://ask.github.com/celery/userguide/routing.html#topic-exchanges py 파일에 정의되어 있습니다. 당신은 경로 @의 app.task (큐 = '대기열 이름')

+0

이것은 내 하루를 저장했습니다. 이 데코레이터를 사용하면 라우팅이 작동하지 않습니까? – Greg0ry

+0

셀러리가 "셀러리"라는 이름의 기본 큐로 이동할 수 있습니다. 그것을 피하십시오. –

관련 문제