Celery는 분산 작업 큐인데, 작업은 보통 큐에 들어온 순서대로 처리됩니다. 그러나 때로는 특정 작업이 다른 작업보다 우선순위가 있어야 할 때가 있습니다. 이를 위해 Celery는 작업 우선순위를 처리하는 몇 가지 방법을 제공합니다.
-
Task 클래스의
priority
속성 사용하기 Celery에서 우선순위를 처리하려면, 작업에 우선순위를 나타내는priority
속성을 추가해야 합니다. 작업 객체의priority
속성을 설정하여 우선순위 값을 할당할 수 있습니다. 숫자 1이 가장 높은 우선순위를 나타내며, 숫자가 높을수록 우선순위가 낮아집니다.from celery import Task class MyTask(Task): priority = 1 def run(self): # 작업 실행 코드
-
작업 큐에 함께 큐잉된 작업들의 우선순위 설정하기 작업 큐에 함께 큐잉된 작업들의 우선순위를 설정하려면
priority
인자를 사용하여 작업 객체를 큐에 추가할 때 우선순위 값을 지정하면 됩니다. 옵션으로priority
인자를 지정하고, 숫자 값을 할당합니다.from tasks import MyTask MyTask.apply_async(args=[1, 2], priority=2)
-
RabbitMQ의 우선순위 지원하기 Celery와 함께 RabbitMQ를 사용하는 경우, RabbitMQ는 우선순위 큐를 지원합니다. 작업에 우선순위를 설정하려면
priority
인자를 사용하여 작업을 큐에 푸시할 때 우선순위 값을 설정할 수 있습니다. 숫자 값이 크면 우선순위가 높아집니다.from celery import Celery app = Celery('myapp', backend='rpc://', broker='pyamqp://guest@localhost//', task_protocol=2) # RabbitMQ의 우선순위 큐 사용을 위한 옵션 설정 app.conf['task_queue_max_priority'] = 10 @app.task(priority=1) def my_task(): # 작업 실행 코드
위의 방법 중 어떤 것을 선택할지는 프로젝트 요구사항에 따라 다를 수 있습니다. Celery의 작업 우선순위 처리 기능을 활용하여 작업을 보다 조율할 수 있습니다.
더 많은 정보 및 예제 코드는 Celery 공식 문서(https://docs.celeryproject.org/)에서 확인할 수 있습니다.