데이터과학 삼학년

[비동기처리]Python Celery를 이용한 비동기 작업 처리 본문

Python

[비동기처리]Python Celery를 이용한 비동기 작업 처리

Dan-k 2024. 10. 24. 23:59
반응형

Python Celery를 이용한 비동기 작업 처리

1. 비동기 작업 처리의 필요성

  • 현대 웹 애플리케이션은 실시간으로 대량의 요청을 처리해야 함.
  • 오래 걸리는 작업(이메일 전송, 이미지 처리 등)은 응답 지연을 유발할 수 있음.
  • 이를 해결하기 위해 비동기 작업 처리가 필요하며, Python에서 이를 구현할 때 주로 Celery를 사용.

2. Celery란?

  • Python 기반 비동기 작업 큐(Task Queue) 라이브러리.
  • 큐에 작업을 넣으면 백그라운드에서 워커(worker)가 처리함.
  • 분산 시스템 및 확장성 있는 작업 처리가 가능하며, 실시간 작업 처리와 스케줄링 지원.

source: https://www.botreetechnologies.com/blog/implementing-celery-using-django-for-background-task-processing/

 

3. Celery의 주요 구성 요소

  • Task: 백그라운드에서 실행되는 작업.
  • Broker: 작업을 전달하는 중간 매개체 (Redis, RabbitMQ 등을 사용).
  • Worker: 큐에 들어온 작업을 처리하는 프로세스.
  • Backend: 작업의 결과를 저장하고, 이를 조회할 수 있는 시스템.

4. Backend의 역할

  • 결과 저장: 작업이 완료된 후 결과를 저장.
  • 결과 조회: 작업이 성공적으로 처리되었는지 확인 가능.
  • 상태 추적: 작업의 상태(SUCCESS, FAILURE, PENDING 등)를 추적.

Backend 예시 코드

from celery import Celery

app = Celery(
    'tasks',
    broker='redis://localhost:6379/0',
    backend='redis://localhost:6379/1'  # Backend 설정
)

@app.task
def add(x, y):
    return x + y
  • backend 설정으로 작업 결과를 Redis에 저장.
  • 작업 완료 후 결과 조회 가능 (result.get()).

Backend 사용 예시

result = add.delay(4, 6)  # 비동기 작업 호출
print(result.get())  # 결과 출력: 10

5. Celery의 Chain 기능

  • Chain은 여러 개의 작업을 순차적으로 실행할 수 있게 해주는 Celery 기능.
  • 각 작업이 완료된 후 그 결과가 다음 작업에 전달됨.
  • 복잡한 워크플로우에서 유용하게 사용됨.

Chain 예시 코드

from celery import chain

@app.task
def add(x, y):
    return x + y

@app.task
def multiply(x, y):
    return x * y

# 순차적으로 작업 실행
result = chain(add.s(4, 6), multiply.s(10)).apply_async()
print(result.get())  # 출력: (4 + 6) * 10 = 100
  • *chain*은 작업의 흐름을 순차적으로 연결함.
  • 위 코드에서는 add 작업이 먼저 실행되고, 그 결과가 multiply 작업에 전달됨.

6. Celery와 Django 통합

  • Django 프로젝트에서 Celery를 사용하면 백엔드에서 비동기 작업을 처리할 수 있음.
  • 설정 예시:
  • python 코드 복사 # 프로젝트 루트에 celery.py 파일 추가 import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') app = Celery('myproject') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
  • Django에서 비동기 작업 정의:
    • tasks.py 파일에서 작업을 정의하고 호출.

7. Celery의 장점 및 주의할 점

  • 장점
    • 작업을 비동기적으로 처리하여 응답 속도를 단축하고 애플리케이션 성능을 개선.
    • 작업 간의 의존성을 체인으로 쉽게 관리 가능.
    • 작업 상태 및 결과를 백엔드에서 추적할 수 있어 복잡한 워크플로우 관리에 유리.
  • 주의할 점
    • 브로커와 백엔드 시스템의 성능 및 모니터링이 중요.
    • 작업 실패 시 적절한 재시도 로직을 구현해야 함.

8. Celery로 효율적인 비동기 작업 관리

  • Celery는 Python 웹 애플리케이션에서 비동기 작업을 처리하는 데 매우 유용한 도구.
  • Chain 기능을 통해 복잡한 작업을 순차적으로 처리할 수 있고, Backend를 사용하여 작업 상태와 결과를 쉽게 관리할 수 있음.
  • Django와 통합하여 백엔드에서 비동기 처리를 효율적으로 할 수 있으므로, 대규모 애플리케이션에서도 효과적임.

 

 

https://docs.celeryq.dev/en/stable/

 

 

 

https://www.botreetechnologies.com/blog/implementing-celery-using-django-for-background-task-processing/

 

Implementing Celery using Django for Background Task Processing – BoTree Technologies

 

www.botreetechnologies.com

 

 

728x90
반응형
LIST
Comments