본문 바로가기

내일배움 캠프/TIL

celery를 사용한 비동기 처리

django에서 메일을 보내는 프로세스를 실행하는 동안 이게 다른 프로세스를 실행을 하지못하니까 약간 시간적으로 손해를 보는거같다는 느낌이 들었다

그래서 이거를 해결하고자 메일보내기같은 좀 시간이 걸리는 부분은 celery같은 비동기 처리 모듈을 이용해서 처리를 하고 그 뒤에 있는 코드를 실행하게 해서 조금더 시간을 절약하고자 했었다

 

celery 설치방법

pip install celery

pip install 을 사용해 celery를 설치후에 원하는 브로커를 선택해서 setting.py url에 넣어줘야 합니다

 

브로커를 사용하는 이유는 비동기 작업 분산, 작업의 안정성과 지속성, 작업의 우선순위와 스케줄링, 확장성과 유연성 같은 이유때문에 celery를 사용해서 비동기 처리를 하기위해서는 브로커를 선택해줘야합니다

#setting.py

BROKER_URL = "amqp://guest:guest@localhost:5672//"
#project/celery.py
import os

from celery import Celery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings")

app = Celery("Project")

app.config_from_object("django.conf:settings", namespace="CELERY")

app.autodiscover_tasks()


@app.task(bind=True, ignore_result=True)
def debug_task(self):
    print(f"Request: {self.request!r}")
#__init__.py
from .celery import app as celery_app

__all__ = ("celery_app",)
#app/task.py
from celery import shared_task

@shared_task
def task():
    task

같은 방법을 통해 비동기 처리를 하고싶은 내용을 작성한다음에

Celery -A Project worker -l info -P eventlet

을 이용해서 실행해 주면 task에서 작성한 내용은 비동기로 처리가 샤샤삭 되게된다

'내일배움 캠프 > TIL' 카테고리의 다른 글

asgi 서버랑 wsgi서버의 차이점  (0) 2023.07.19
simple jwt token 커스터마이징  (0) 2023.06.15
django_cron 을 통한 스케줄러 사용  (0) 2023.06.14
vue router  (2) 2023.06.05
코딩테스트 2016년  (0) 2023.06.02