[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.기본적으로 모든 것은 celery라는 기본 대기열에 저장됩니다 (대기열을 지정하지 않으면 샐러리 작업자가 처리하는 것입니다)
기본적으로 모든 것은 celery라는 기본 대기열에 저장됩니다 (대기열을 지정하지 않으면 샐러리 작업자가 처리하는 것입니다)
django_project_root / myapp / tasks.py에 do_work 태스크 기능이 있다고 가정 해보십시오.
do_work 태스크를 다음과 같이 자신의 큐에 살도록 구성 할 수 있습니다.
CELERY_ROUTES = { 'myproject.tasks.do_work': {'queue': 'red'}, }
그런 다음 셀러리 작업자 -Q red를 사용하여 작업자를 실행하면 대기열의 작업 만 처리됩니다 (샐러리 작업자와 함께 호출 된 다른 작업자는 기본 대기열의 픽업 작업 만 수행합니다)
문서의 작업 라우팅 섹션에서 모두 설명해야합니다.
-
==============================
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
from https://stackoverflow.com/questions/19853378/how-to-keep-multiple-independent-celery-queues by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Beautifulsoup - nextSibling (0) | 2018.10.20 |
---|---|
[PYTHON] numpy 배열로 NaN 값을 전달하는 가장 효율적인 방법 (0) | 2018.10.20 |
[PYTHON] 위키 마크 업을위한 파이썬 모듈 (0) | 2018.10.20 |
[PYTHON] 순환 가져 오기 문을 해결하는 Python 방법? (0) | 2018.10.20 |
[PYTHON] 파이썬에서 R 스크립트 실행하기 (0) | 2018.10.20 |