[python] Celery 서버의 그레이스풀한 종료 설정 방법은 어떻게 되는가?
  1. 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,  # 작업을 실행할 주기 (초 단위)
        },
    }
    
  2. Celery Worker 실행하기
    celery -A celeryconfig worker --beat --loglevel=info
    

위의 설정을 적용하면 Celery 서버는 그레이스풀한 종료를 수행하며, 현재 실행 중인 작업들이 완료될 때까지 서버를 유지합니다.