250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- TensorFlow
- correlation
- hadoop
- grad-cam
- tensorflow text
- XAI
- requests
- airflow subdag
- Counterfactual Explanations
- integrated gradient
- flask
- gather_nd
- youtube data
- GenericGBQException
- 공분산
- API
- GCP
- 상관관계
- Retry
- session 유지
- login crawling
- spark udf
- API Gateway
- Airflow
- UDF
- BigQuery
- 유튜브 API
- subdag
- chatGPT
- top_k
Archives
- Today
- Total
데이터과학 삼학년
[비동기처리]Python Celery를 이용한 비동기 작업 처리 본문
반응형
Python Celery를 이용한 비동기 작업 처리
1. 비동기 작업 처리의 필요성
- 현대 웹 애플리케이션은 실시간으로 대량의 요청을 처리해야 함.
- 오래 걸리는 작업(이메일 전송, 이미지 처리 등)은 응답 지연을 유발할 수 있음.
- 이를 해결하기 위해 비동기 작업 처리가 필요하며, Python에서 이를 구현할 때 주로 Celery를 사용.
2. Celery란?
- Python 기반 비동기 작업 큐(Task Queue) 라이브러리.
- 큐에 작업을 넣으면 백그라운드에서 워커(worker)가 처리함.
- 분산 시스템 및 확장성 있는 작업 처리가 가능하며, 실시간 작업 처리와 스케줄링 지원.
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/
728x90
반응형
LIST
'Python' 카테고리의 다른 글
파이썬 함수 파라미터, 리턴값 타입지정 / 파라미터 default값 설정 (0) | 2024.01.05 |
---|---|
[디자인 패턴] Singleton 싱글턴 패턴 (0) | 2023.12.09 |
어트리뷰트 (Attribute), 프로퍼티 (Property), 디스크립터 (Descriptor) (0) | 2023.08.30 |
부동소수점(0.1+0.2 != 0.3 ???) (0) | 2023.07.17 |
SOLID-python 원칙 : clean code (0) | 2023.07.05 |
Comments