일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- python os
- gcc regex
- snmp test
- c3 second
- c3 축 가리기
- 정규식 컴파일
- python subprocess
- regex_search
- selinux port 등록
- InfluxDB
- centos pyhon 설치
- snmp
- g++ 업데이트
- python popen
- gcc 업데이트
- subporcess path
- linux시간으로 변경
- c3 초
- CentOS7
- grafana dashboard
- telegraf
- 1697
- semanage
- c3 step graph
- 정규식 활용
- c3 축 없애기
- influxdb 설치
- c++ 정규식
- 백준
- 정규식 문자열 출력
- Today
- Total
리셋 되지 말자
celery 분리 구성 [1] 본문
django server와 celery server를 분리하기위해 고민하고 고생했던걸 기록했습니다. 틀릴 수도 있습니다. 아니 틀릴 확률이 매우 높습니다.
Django 프로젝트에서의 celery 구조
현재 사용하고 있는 django 프로젝트 구조는 아래와 같다. 현재 csapi라는 app이 등록된 상태이다.
django/
├── config
│ ├── asgi.py
│ ├── celery.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── csapi
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── models.py
│ ├── tasks.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── Dockerfile
├── manage.py
└── templates
└── csapi
├── image_show.html
├── main.html
└── upload.html
여기서 celery 관련 파일만 추려보면 아래와 같다.
django/
├── config
│ ├── celery.py
│ ├── __init__.py
│ ├── settings.py
├── csapi
│ ├── tasks.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── requirements.txt
settings를 이용한 Celery 설정
보통은 아래와 같이 broker에 관련된 정보들을 settings.py에 입력하고 celery.py에서 settings.py에 설정한 내용을 가져오는 식으로 많이 사용한다. __init.py__는 django가 실행될 때 celery를 로드하게 된다.
- settings.py
# celery setting
BROKER_URL = os.environ['BROKER_URL']
BROKER_USER = os.environ['BROKER_USER']
BROKER_PASSWORD = os.environ['BROKER_PASSWORD']
- celery.py
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
BROKER_URL = os.environ['BROKER_URL']
BROKER_USER = os.environ['BROKER_USER']
BROKER_PASSWORD = os.environ['BROKER_PASSWD']
app = Celery('config')
app.config_from_object('django.conf:settings', namespace='CELERY')
# app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.autodiscover_tasks()
- __init__.py
from .celery import app as celery_app
__all__ = ('celery_app',)
settings를 사용하지 않는 Celery 설정
settings.py에 broker정보를 입력하지 않고 그냥 celery.py에 설정했다. autodiscover_tasks() 는 django에 등록된 app에 있는 task를 자동으로 수집한다. 수집하는 방식은 공식문서에서 찾아보면 <app이름>.tasks.py 에 등록된 task를 수집한다고 언급되어 있다. 현재 csapi app이 등록된 상태이므로, csapi.tasks.py 에 등록된 task를 자동으로 수집한다.
- celery.py
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
BROKER_URL = os.environ['BROKER_URL']
BROKER_USER = os.environ['BROKER_USER']
BROKER_PASSWORD = os.environ['BROKER_PASSWD']
app = Celery('config', backend='rpc://', broker=f'amqp://{BROKER_USER}:{BROKER_PASSWORD}@{BROKER_URL}:5672//')
# app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.autodiscover_tasks()
task와 shared_task 차이
현재 csapi/tasks.py 파일 내용은 아래와 같이 shared_task 데코레이터를 사용하여 task를 선언했다.
- csapi/tasks.py
from celery import shared_task
@shared_task
def test_task():
print('connect test task')
return 'test'
이를 task로 변경하면 아래와 같다.
from ..config.celery import app
@app.task
def test_task():
print('connect test task')
return 'test'
이처럼 shared task는 app 인스턴스를 import 하지 않아도 task를 만들어서 사용할 수 있게 해준다.
'프로젝트' 카테고리의 다른 글
[CSAPI] celery 코드작성 및 이미지 생성 (0) | 2021.12.15 |
---|---|
celery 분리 구성 [2] (0) | 2021.12.15 |
[CSAPI] boto3 관련 스크랩 (0) | 2021.12.12 |
[CSAPI] django 코드작성 및 이미지 생성 (0) | 2021.12.10 |
[CSAPI] nginx 코드작성 및 이미지 생성 (0) | 2021.12.10 |