[python] Celery의 작업 우선순위 처리 방법은 어떻게 되는가?

Celery는 분산 작업 큐인데, 작업은 보통 큐에 들어온 순서대로 처리됩니다. 그러나 때로는 특정 작업이 다른 작업보다 우선순위가 있어야 할 때가 있습니다. 이를 위해 Celery는 작업 우선순위를 처리하는 몇 가지 방법을 제공합니다.

  1. Task 클래스의 priority 속성 사용하기 Celery에서 우선순위를 처리하려면, 작업에 우선순위를 나타내는 priority 속성을 추가해야 합니다. 작업 객체의 priority 속성을 설정하여 우선순위 값을 할당할 수 있습니다. 숫자 1이 가장 높은 우선순위를 나타내며, 숫자가 높을수록 우선순위가 낮아집니다.

    from celery import Task
       
    class MyTask(Task):
        priority = 1
           
        def run(self):
            # 작업 실행 코드
    
  2. 작업 큐에 함께 큐잉된 작업들의 우선순위 설정하기 작업 큐에 함께 큐잉된 작업들의 우선순위를 설정하려면 priority 인자를 사용하여 작업 객체를 큐에 추가할 때 우선순위 값을 지정하면 됩니다. 옵션으로 priority 인자를 지정하고, 숫자 값을 할당합니다.

    from tasks import MyTask
       
    MyTask.apply_async(args=[1, 2], priority=2)
    
  3. 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/)에서 확인할 수 있습니다.