1 분 소요

HeXA에서 제작중인 버스 정보 표시 웹페이지를 제작 중 django, celery, celery beat를 사용함에 있어 몇가지 고생했던 점 적기

Django는 웹 프레임워크다. 프론트엔드/백엔드를 작업할 수 있다. (pip3 install django)

Celery는 메세지 기반 비동기 작업 큐라고 하는데, 결국엔 일한다. (pip3 install celery)

Celery beat는 스케쥴러다. 스케쥴에 따라 celery worker에게 일을 보내준다. (pip3 install django-celery-beat)

그 외 celery는 메세지 브로커가 필요한데 RabbitMQ를 사용했다. (sudo apt install rabbitmqctl)

거기에다가 데이터베이스로는 기본 sqlite 말고 postgresql로 바꿀 예정이다. (sudo apt install postgresql)

결국 여럿이서 작업하는 프로젝트니까 requirments 파일을 만들어서 버전 맞추면 되지만 뭐 아무튼.

켜야될거 다 켜기

웹페이지를 보려면

python3 manage.py runserver

실행은 유지시키기

이 시점에서 웹페이지를 볼 수 있다.

celery가 제대로 일하려면

sudo rabbitmq-server

rabbitmq 실행 후 Ctrl+C로 빠져나온 후

celery -A 앱_이름 worker -l INFO

잠깐, 앱_이름 이란? 아마도 celery.py 파일에 작성되어있을 app = Celery(‘앱_이름’, 대충다른설정들) <= 이 줄에 쓴 앱_이름 을 적기

celery worker 실행은 유지시키기

이 시점에서 python3 manage.py shell 로 열린 쉘 내부에서 코드 실행 등의 방법으로 task를 실행가능하다.

beat로 스케쥴대로 일을 시키려면

celery -A 앱_이름 beat

celery beat 실행은 유지시키기

이 시점에서 정해진 스케쥴대로 task들이 자동으로 실행된다.

그러니까 결국 완전히 작동하려면

rabbitmq-server

django

celery

celerybeat

프로세스가 전부 실행중이어야 한다.

거기에 sqlite 아닌 DB를 쓴다면 그거까지 켜야한다.

기본 스케쥴러는 제약이 있는듯하다

기본 스케쥴러로는 작동중에, 그러니까 런타임에 스케쥴을 바꾸는 방법이 없는듯하다…

그냥 beat 말고 다른걸 쓰거나, 아니면 database scheduler로 바꾸든가 해야하는것같다…

카테고리: ,

업데이트: