기본적으로 새로운 콘텐츠에 변화가 있을 때, 다시 인덱싱을 하게된다. 새롭게 리빌딩을 하는 함수는 셀러리를 통해 동작하는 비동기 태스크 큐이며, Activitylog
가 만들어지는 상황에서 함수 호출을 하게된다.
기본적인 용어 정리부터 하고 가자
Task Queue: 스레드와 머신으로 일을 분배하는 방법으로 task를 수행할 워커가 있는지 모니터링하면서 비동기적으로 분산 및 처리를 하도록 한다.
Celery: 실시간 프로세싱과 스케줄링에 초점을 맞추어 비동기 작업을 수행하도록 한다.
Redis: Celery가 작동하기 위한 중간 다리역할을 하는 메시지 브로커이다.
호스트에서 .delay()
로 태스크 큐로 전송을 하게되면 이는 Redis를 통해서 Celery가 이를 인지하고 비동기 작업을 수행하게 된다.
Celery의 첫 실행 화면이다.
transport
: 비동기 태스크를 보낼 메시지 브로커의 주소results
: backend라고도 하며, 비동기 작업이 완료되었을 때, 결과를 저장할 주소# tasks.py
from celery import Celery
app = Celery(__name__, broker='redis://localhost:6379',
backend='redis://localhost:6379')
위에서 정의한 app
을 바탕으로 비동기 처리를 할 함수를 장식자를 이용하여 등록할 수 있다.
celery -A tasks worker -l INFO
를 통해서 celery worker를 실행할 수 있다.
Celery를 실행한 후에, 콘솔을 열고 다음과 task로 등록한 함수를 delay()
와 같이 사용하면 Redis로 관련 내용을 전송 celery가 이를 받게 된다.
celery가 메시지를 받고 작업을 하게된다.
Celery의 장점 중, 하나는 horizontal scaling이 가능하다는 것이다. 단순히 worker만 하나더 만들어 주면 되기 때문에 이를