Task Queue


<aside> 💡 Task Queue는 스레드 또는 머신에 작업을 분산시키기 위한 메커니즘이다. task라는 하나의 작업 단위를 입력으로 받는다. 전담 워커 프로세스는 새로운 작업을 수행하기 위해 태스크 큐를 지속적으로 모니터링한다.

</aside>

amqp란?

administration task에 접근을 가능하게 해주는 AMQP API 를 사용할 수 있게 해줌

celery -A proj amqp

celery와 celery beat

<aside> 💡 주기적으로 실행하는 task들은 celery와 celery beat가 사용됨

celery beat : 스케쥴러. task들을 주기적으로 호출한다

만약 beat를 celery worker보다 나중에 끌 경우, broker에 쌓여서 추후에 worker를 실행했을 때 남아있는 task들을 처리하게 된다

</aside>

Routing(beat_schedule)

<aside> 💡 같은 폴더 내에서 여러 scheduler를 돌릴 경우 KeyError가 발생할 수 있는데 특정 Queue에서 돌리도록 routing을 해줌

</aside>

app.conf.task_default_queue = 'default'
app.conf.task_queues = (
    Queue('backend',    routing_key='backend'),
)

'update_periodic_locked_user_status': {
        'task': 'aip.tasks.db_manage.update_periodic_locked_user_status',
        'schedule': HIGH_PRIORITY_TASK,
        'options': {'queue': 'backend'},
celery -A aip worker --loglevel=info --pool=solo --queues=backend

AMQP(Advanced Message Queueing Protocal)

Broker


브로커란 요청한 작업을 담아두는 큐이고 담아둔 요청을 여러 개의 worker에게 적절히 분배