개요

정해진 시각이 되면 django model 객체의 필드값을 변경하는 기능을 만들고 싶다. 아래 stackflow 답변처럼 celery를 이용해 비동기적으로 정해진 시간에 맞추어 함수(task)를 실행하려고 한다.

Django: How to automatically change a field's value at the time mentioned in the same object?

환경 구축

장고(Django)에서 셀러리(Celery) 사용하기 1편

celery를 사용하려면 broker가 필요한데, RabbitMQ를 이용하기로 정했다. Redis에 비해 안정적이고, 긴 시간 동안 대기가 지속되어야 하기 때문이다.

Celery 설치

Anaconda 가상환경에 Celery 패키지 설치 - kombu, amqp 패키지가 함께 설치됨

[cmd]

> pip install celery

RabbitMQ 설치

RabbitMQ는 windows, ubuntu를 모두 지원하지만, 어차피 터미널 창에서 다룰 거 관리도 편하게 wsl로 만들어놓은 ubuntu 가상환경에 설치했다.

먼저 window에서 설치하려고 찾아보니 pip을 지원하지도 않고, 직접 installer를 깔고, .bat 파일을 여러 개 받길래 ubuntu를 선택했다.

https://www.youtube.com/watch?v=8lnybIaDz2M

[ubuntu]

$ sudo apt-get install rabbitmq-server

RabbitMQ 구동

RabbitMQ 시작, 정지, 재시작, 리로드

기본 서버 시작 명령어인 service rabbitmq-server start를 ubuntu 터미널에 입력하면 권한이 없다고 뜬다. 앞에 sudo를 붙여주어야 한다.

[ubuntu]