복붙노트

[PYTHON] 여러 개의 독립적 인 셀러리 대기열을 유지하는 방법

PYTHON

여러 개의 독립적 인 셀러리 대기열을 유지하는 방법

다른 작업과 작업자가있는 여러 개의 셀러리 대기열을 같은 redis 데이터베이스에 보관하려고합니다. 내 컴퓨터에서 두 개가 아닌 한 대의 서버 만 원할 경우 편리합니다.

셀로리 튜토리얼을 따랐는데, 그것이 나를 위해 일할 수있는 유일한 방법이기 때문입니다. 이제 약간 수정 된 이름 / 대기열을 사용하여 모든 것을 복제하려고하면 오류가 계속 발생합니다.

참고 - 필자는 Python과 Celery를 처음 접했고, 분명히 문제의 일부입니다. 나는 어떤 부분이 "task / tasks"라는 이름으로 특별한 단어와 이름을 붙일 지 모르겠습니다.

필자의 응축 버전 : 샐러리를 실행하십시오 - 노동자를 산란시키기위한 작업자. tasks.py에는 Celery에 연결하는 celery = Celery ( 'tasks', broker = 'redis : // localhost') 및 지연시키고 자하는 기능 위에 @task ()가 포함 된 작업 코드가 포함되어 있습니다.

내 작업 내 대기열 작업 프로그램 ...

from tasks import do_work
do_work.delay()

위의 모든 것을 감안할 때, 별도의 대기열과 작업자에서 독립적으로 실행되는 두 가지 유형의 작업으로 전환하기 위해 취해야 할 조치는 무엇입니까? 예를 들어, blue_tasks 및 red_tasks?

모든 작업 인스턴스를 blue_tasks 또는 red_tasks로 변경하려고 시도했습니다. 그러나 blue_tasks를 대기열에 넣었을 때 내가 시작한 red_tasks 작업자가 작업을 시작합니다.

기본 대기열 등에 대해 읽었으므로이 코드를 시도했지만 작동하지 않았습니다.

CELERY_DEFAULT_QUEUE = 'red'
CELERY_QUEUES = (
    Queue('red', Exchange('red'), routing_key='red'),
)

부수적으로, 셀러리가 기본 amqp 인스턴스에 연결하려고 시도하는 셀러리 작업자 오류와 셀러리 - 작업 담당자가 샐러리가 Redis에 연결하도록 알리는 이유를 이해하지 못합니다. 셀러리 작업자가 아무 것도 지정되지 않은 경우 작업자에게 실행을 시도하는 작업 코드는 무엇입니까?

해결법

  1. ==============================

    1.기본적으로 모든 것은 celery라는 기본 대기열에 저장됩니다 (대기열을 지정하지 않으면 샐러리 작업자가 처리하는 것입니다)

    기본적으로 모든 것은 celery라는 기본 대기열에 저장됩니다 (대기열을 지정하지 않으면 샐러리 작업자가 처리하는 것입니다)

    django_project_root / myapp / tasks.py에 do_work 태스크 기능이 있다고 가정 해보십시오.

    do_work 태스크를 다음과 같이 자신의 큐에 살도록 구성 할 수 있습니다.

    CELERY_ROUTES = {
        'myproject.tasks.do_work': {'queue': 'red'},
    }
    

    그런 다음 셀러리 작업자 -Q red를 사용하여 작업자를 실행하면 대기열의 작업 만 처리됩니다 (샐러리 작업자와 함께 호출 된 다른 작업자는 기본 대기열의 픽업 작업 만 수행합니다)

    문서의 작업 라우팅 섹션에서 모두 설명해야합니다.

  2. ==============================

    2.동적으로 다른 대기열에 연결하려면 다음 단계를 따르십시오.

    동적으로 다른 대기열에 연결하려면 다음 단계를 따르십시오.

    1) 'queue'속성을 사용하여 큐의 이름을 지정하십시오

    celery.send_task('job1', args=[], kwargs={}, queue='queue_name_1')
    celery.send_task('job1', args=[], kwargs={}, queue='queue_name_2')
    

    (여기서 특정 작업은 두 개의 대기열을 사용합니다)

    2) 구성 파일에 다음 항목을 추가하십시오

    CELERY_CREATE_MISSING_QUEUES = True
    

    3) 작업자를 시작하는 동안 -Q를 사용하여 작업을 소비 할 큐 이름을 지정하십시오

    celery -A proj worker -l info -Q queue1 
    celery -A proj worker -l info -Q queue2
    
  3. from https://stackoverflow.com/questions/19853378/how-to-keep-multiple-independent-celery-queues by cc-by-sa and MIT license