[python] Celery 서버의 그레이스풀한 종료 설정 방법은 어떻게 되는가?
- Celery Config 파일 생성하기
# celeryconfig.py from kombu import Exchange, Queue # Celery worker와 beat에 그레이스풀한 종료를 설정하기 위한 설정 CELERYD_CONCURRENCY = 1 # 동시에 실행되는 worker의 수 (optional) # 환경에 따라서 Broker를 설정 # 예: RabbitMQ를 사용하는 경우 BROKER_URL = 'amqp://guest:guest@localhost:5672//' # 예약된 작업들을 저장하기 위한 Backend 설정 # 예: RabbitMQ를 사용하는 경우 CELERY_RESULT_BACKEND = 'amqp://' # Queue 설정 - 작업들을 어떤 Queue에 전달할지 결정 CELERY_QUEUES = ( Queue('default', Exchange('default'), routing_key='default'), ) # Task 작업들을 어떤 Worker에 할당할지 결정 # 예: round-robin 방식의 worker 할당 CELERYD_PREFETCH_MULTIPLIER = 1 # Task 작업 결과를 저장하기 위한 Exchange 설정 CELERY_ANNOTATIONS = {'*': {'task_acks_late': True}} # 그레이스풀한 종료를 위한 Worker 종류 설정 CELERYD_MAX_TASKS_PER_CHILD = 1 # Beat 실행을 위한 Scheduler 설정 CELERYBEAT_SCHEDULE = { 'my-task': { 'task': 'app_name.task_name', 'schedule': 60, # 작업을 실행할 주기 (초 단위) }, }
- Celery Worker 실행하기
celery -A celeryconfig worker --beat --loglevel=info
위의 설정을 적용하면 Celery 서버는 그레이스풀한 종료를 수행하며, 현재 실행 중인 작업들이 완료될 때까지 서버를 유지합니다.