기본적으로 새로운 콘텐츠에 변화가 있을 때, 다시 인덱싱을 하게된다. 새롭게 리빌딩을 하는 함수는 셀러리를 통해 동작하는 비동기 태스크 큐이며, 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만 하나더 만들어 주면 되기 때문에 이를