[python] Celery로 큐에서 높은 우선순위의 작업을 처리하는 방법은 어떻게 되는가?

Celery는 파이썬으로 작성된 분산 작업 큐 시스템입니다. 큐에서 작업을 처리하는 동안, 우선순위가 높은 작업을 처리할 수 있다면 전반적인 성능을 향상시킬 수 있습니다. 이번 블로그 포스트에서는 Celery를 사용하여 큐에서 높은 우선순위 작업을 처리하는 방법에 대해 알아보겠습니다.

작업 우선순위 설정하기

Celery에서 작업을 처리하는 우선순위는 task_priority라는 속성을 사용하여 설정할 수 있습니다. 작업을 생성할 때 해당 속성을 설정하면 됩니다.

from celery import Celery
app = Celery('myapp', broker='redis://localhost:6379/0')

@app.task
def process_task(task_id):
    # 작업 처리 코드

high_priority_task = process_task.apply_async(args=(task_id,), priority=9)

위의 코드에서 priority 매개변수를 9로 설정하여 우선순위를 높게 설정했습니다. 큐에서 작업을 처리할 때 이 값을 참조하여 우선순위 순서대로 처리됩니다.

높은 우선순위 작업 먼저 처리하기

Celery에서 우선순위가 높은 작업을 먼저 처리하려면 다음과 같은 방법을 사용할 수 있습니다.

  1. 큐에서 작업 가져오기 전에 우선순위 기준으로 정렬하기

    Celery는 TaskConsumer라는 클래스를 사용하여 작업을 가져올 수 있습니다. TaskConsumer 클래스의 consume_from 메서드를 사용할 때, sortqueues 옵션을 사용하여 우선순위에 따라 큐를 정렬할 수 있습니다.

     from celery.app.task_consumer import TaskConsumer
     consumer = TaskConsumer(app=app)
     consumer.consume_from(
         queues=['queue1', 'queue2'],
         # 큐를 우선순위 순서대로 정렬합니다.
         sortqueues=True,
     )
    

    이렇게 큐를 우선순위에 따라 정렬하면, 우선순위가 높은 작업부터 처리됩니다.

  2. 작업 처리하는 워커 수 조정하기

    Celery는 작업을 병렬로 처리하는 워커(worker)를 사용합니다. 큐에서 작업을 가져오는 워커의 수를 조정하여 우선순위가 높은 작업을 먼저 처리할 수 있습니다. 워커의 수는 Celery 설정 파일에서 CELERYD_CONCURRENCY 옵션을 설정하여 변경할 수 있습니다.

     # celery.py
     CELERYD_CONCURRENCY = 10
    

    위의 설정에서 워커의 수를 10으로 설정하면, 동시에 10개의 작업을 처리할 수 있습니다. 이렇게 워커의 수를 늘리면 우선순위가 높은 작업들이 더 빠르게 처리될 수 있습니다.

높은 우선순위의 작업을 큐에서 처리하는 방법에 대해 알아보았습니다. Celery는 대규모 작업 처리에 최적화된 도구로, 큐에서 작업을 처리할 때 우선순위를 잘 지정하면 더 효율적인 작업 처리가 가능합니다.

더 자세한 내용은 Celery 공식 문서를 참고하시기 바랍니다.