40번째 줄: |
40번째 줄: |
| |사전설정 | | |사전설정 |
| |장고에서 celery_tutorial이라는 프로젝트가 만들어져 있다 가정하고 진행한다. | | |장고에서 celery_tutorial이라는 프로젝트가 만들어져 있다 가정하고 진행한다. |
− | | | + | |pip install celery |
| |- | | |- |
| |라이브러리 인스턴스 만들기 | | |라이브러리 인스턴스 만들기 |
| |settings.py가 있는 디렉토리에 celery.py를 생성 우측과 같이 입력한다. | | |settings.py가 있는 디렉토리에 celery.py를 생성 우측과 같이 입력한다. |
| + | |
| | | |
| | | |
87번째 줄: |
88번째 줄: |
| |- | | |- |
| |확장라이브러리 | | |확장라이브러리 |
− | |라이브러리를 설치한다.[선택사항일까. 구현해보고 진행해보자.] | + | |라이브러리를 설치한다. |
| + | 이거 설치 안하면 ModuleNotFoundError: No module named 'django-db' 에러가 뜬다. |
| |pip install django-celery-results | | |pip install django-celery-results |
| |- | | |- |
| |settings.py 설정 | | |settings.py 설정 |
− | |메시지브로커 주소 등 설정값을 넣어준다. | + | |메시지브로커 주소 등 설정값을 넣어준다. celery.py에서 설정한 namespace가 설정에서 활용된다.(맨 앞에 CELERY_로 시작하는 내용들이 샐러리 설정이 된다.) |
| + | |
| + | |
| 브로커로 RabbitMQ를 사용한다면 다음과 같이.<syntaxhighlight lang="python"> | | 브로커로 RabbitMQ를 사용한다면 다음과 같이.<syntaxhighlight lang="python"> |
| CELERY_BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost' # 브로커 주소값. | | CELERY_BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost' # 브로커 주소값. |
145번째 줄: |
149번째 줄: |
| |준비 확인 | | |준비 확인 |
| 샐러리 실행 | | 샐러리 실행 |
− | |[데몬으로 시작하는 법은 따로 있나보다.] | + | |다른 터미널 창을 열어 따로 실행해주어야 한다.(redis 등 메시지브로커가 실행된 상태여야 한다.) |
− | 다른 터미널 창을 열어 따로 실행해주어야 한다. | + | 뭔가 성공적인 메시지가 뜨면 준비 완료. |
| | | |
| task.py의 내용이 바뀌면 재실행 해주어야 한다.(장고의 내용이 바뀌면 재실행하듯.) | | task.py의 내용이 바뀌면 재실행 해주어야 한다.(장고의 내용이 바뀌면 재실행하듯.) |
− | |celery -A settings.py가있는폴더.celery worker --loglevel=info | + | |celery -A 프로젝트명.celery worker --loglevel=info |
| |} | | |} |
| + | 이후 운용에선 굳이 셀러리를 시작시켜주는 게 아니라 장고에서 자연스레 돌리는 듯하다.[확인필요] |
| | | |
− | == 뷰에서의 작업 == | + | == DB조작 작업 == |
| {| class="wikitable" | | {| class="wikitable" |
| !과정 | | !과정 |
182번째 줄: |
187번째 줄: |
| |뷰 | | |뷰 |
| |delay()는 celery의 업무를 수행하는 apply_async()의 간소판. | | |delay()는 celery의 업무를 수행하는 apply_async()의 간소판. |
| + | delay() 따위가 없으면 그냥 함수와 같이 실행. |
| 카운트다운이나 재실행 등의 자세한 옵션은 apply_async()에 더 자세한 변수를 넣음으로써 가능해진다.(좀 과하게 긴 작업을 제한한다든가.) | | 카운트다운이나 재실행 등의 자세한 옵션은 apply_async()에 더 자세한 변수를 넣음으로써 가능해진다.(좀 과하게 긴 작업을 제한한다든가.) |
| |<syntaxhighlight lang="python"> | | |<syntaxhighlight lang="python"> |