@shared_task 작성과 호출
delay()로 함수를 비동기적으로 실행합니다
@shared_task 작성과 호출은(는) CoddyKit의 무료 Django Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Django Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Django Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
작업은 함수일 뿐입니다
Celery 작업은 위에 데코레이터가 붙은 일반 Python 함수입니다. 데코레이터는 Celery에 해당 함수를 나중에 대기열에 넣고 실행하는 방법을 알려 줍니다.
shared_task를 사용하는 이유
@app.task 대신 @shared_task를 사용하면 작업이 특정 Celery 앱에 종속되지 않습니다. Django 앱 내부에서 표준적으로 사용하는 방식입니다.
첫 작업 작성하기
앱 내부의 tasks.py에 작업을 작성하세요. 일반 함수를 데코레이터로 꾸미면 Celery가 자동 검색을 통해 이를 찾아냅니다.
from celery import shared_task
@shared_task
def add(x, y):
return x + ydelay로 호출하기
작업을 백그라운드에서 실행하려면 함수를 직접 호출하는 대신 delay()를 호출하세요. 작업을 대기열에 넣고 즉시 반환합니다.
add.delay(2, 3) # queued, runs on a workerdelay와 직접 호출 비교
add(2, 3)을 호출하면 웹 프로세스에서 지금 바로 실행됩니다. add.delay(2, 3)을 호출하면 대기열로 전송됩니다. 같은 함수지만 실행 시점은 크게 다릅니다.
간단한 인수 전달하기
인수는 JSON으로 직렬화되어 브로커로 전송되므로, 전체 모델 객체가 아니라 ID나 문자열처럼 간단한 값을 전달하세요.
send_email.delay(user.id) # good
send_email.delay(user) # avoid: not serializableAsyncResult 핸들
delay()는 AsyncResult를 반환합니다. 해당 ID를 저장해 두었다가 나중에 상태를 확인하거나 결과 백엔드에서 반환 값을 가져올 수 있습니다.
result = add.delay(2, 3)
print(result.id)apply_async로 더 세밀하게 제어하기
카운트다운이나 특정 대기열이 필요하신가요? 추가 옵션을 제공하는 delay의 확장 버전인 apply_async()를 사용하십시오.
add.apply_async((2, 3), countdown=10) # run after 10s실패 시 재시도
작업을 바인딩하고 self.retry()를 호출하면 오류가 발생한 후 작업을 다시 실행할 수 있습니다. 다음에는 성공할 수도 있는 불안정한 네트워크 호출에 특히 유용합니다.
@shared_task(bind=True, max_retries=3)
def fetch(self):
try:
call_api()
except Exception as e:
raise self.retry(exc=e)멱등 작업이 중요합니다
작업은 재시도될 수 있으므로 멱등성을 갖도록 설계하십시오. 두 번 실행해도 안전하여 요금이 두 번 청구되거나 메시지가 두 번 전송되지 않아야 합니다. 🔁
작업자 로그 확인하기
delay를 호출할 때 작업자 터미널을 확인하십시오. 작업이 수신된 내용과 그 결과를 볼 수 있으며, 이는 문제를 디버깅하는 가장 빠른 방법입니다. 👀
빠른 확인
Celery 작업을 백그라운드에서 실행하려면 어떻게 해야 하나요?
요약: 작업 작성하기
함수에 @shared_task를 적용하고 .delay()로 호출해 대기열에 넣으십시오. 간단한 ID를 전달하고 안전하게 재시도할 수 있도록 작업을 설계하십시오. 🎯
AI 튜터와 함께 Python을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“@shared_task 작성과 호출” 강의는 무료인가요?
네 — “@shared_task 작성과 호출” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Django Academy 강의 전체를 잠금 해제할 수 있습니다. Django Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“@shared_task 작성과 호출”에서 뭘 배우나요?
delay()로 함수를 비동기적으로 실행합니다 브라우저에서 직접 실행하는 실습 코드로 Django Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Django Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Django Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“@shared_task 작성과 호출” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Django Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Django Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 백그라운드 작업이 필요한 이유
- 브로커와 Celery 설정
- @shared_task 작성과 호출
- Celery Beat로 예약 작업 실행