[python] Celery 작업에 대한 우선순위 설정 방법은 어떻게 되는가?
- Priority Queue 사용: Celery에서는 작업을 처리하는 데 사용되는 큐를 선언할 수 있습니다. 다양한 우선순위를 가진 큐를 구성하여 작업을 보관하고 처리의 우선순위를 지정할 수 있습니다. 큐의 이름과 우선순위를 설정하는 방법은 Celery의 설정 파일에서 설정할 수 있습니다.
CELERY_QUEUES = (
Queue('low_priority', routing_key='task.low_priority'),
Queue('high_priority', routing_key='task.high_priority'),
# 기타 큐 설정
)
CELERY_ROUTES = {
'tasks.low_priority_task': {'queue': 'low_priority'},
'tasks.high_priority_task': {'queue': 'high_priority'},
# 다른 작업에 대한 큐 설정
}
- ETA(예약 시간) 설정: 작업이 특정 시간 이후에 실행되어야 하는 경우,
ETA
매개변수를 사용하여 작업을 예약할 수 있습니다.ETA
는 작업의 예상 시작 시간을 지정하는 데 사용되며, 시작 시간이 이전(과거)이거나 현재보다 이전으로 설정되지 않도록 주의해야 합니다.
from datetime import datetime, timedelta
from celery import Celery
app = Celery('myapp', broker='amqp://guest@localhost//')
# 현재 시간보다 10분 후에 작업이 실행될 수 있도록 예약
eta = datetime.now() + timedelta(minutes=10)
app.send_task('mytask', args=[1, 2], eta=eta)
- 특정 작업에 대한 우선순위 설정: 작업에 우선순위를 직접 지정하려면 작업 함수의
priority
매개변수를 추가하고, 작업을 시작할 때 해당 매개변수를 전달해야 합니다. 그런 다음 작업자(worker)에서 작업을 처리하는 동안 이러한 우선순위를 사용하여 작업을 처리할 수 있습니다.
from celery import Celery
app = Celery('myapp', broker='amqp://guest@localhost//')
@app.task
def mytask(a, b, priority=0):
# 우선순위에 따라 작업 처리
# ...
pass
# 우선순위가 1인 작업 실행
mytask.apply_async(args=[1, 2], priority=1)
위의 방법들을 사용하여 Celery 작업의 우선순위를 설정할 수 있습니다. 작업을 처리하는 동안 우선순위에 따라 작업자(worker)가 작업을 처리하게 됩니다.