Skip to content

Background Tasks

Starlette는 프로세스 내 백그라운드 작업을 위한 BackgroundTask 클래스를 포함합니다.

백그라운드 작업은 응답에 첨부되어야 하며, 응답이 전송된 후에만 실행됩니다.

BackgroundTask

응답에 단일 백그라운드 작업을 추가하는 데 사용됩니다.

서명: BackgroundTask(func, *args, **kwargs)

from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
from starlette.background import BackgroundTask


...

async def signup(request):
    data = await request.json()
    username = data['username']
    email = data['email']
    task = BackgroundTask(send_welcome_email, to_address=email)
    message = {'status': '가입 성공'}
    return JSONResponse(message, background=task)

async def send_welcome_email(to_address):
    ...


routes = [
    ...
    Route('/user/signup', endpoint=signup, methods=['POST'])
]

app = Starlette(routes=routes)

BackgroundTasks

응답에 여러 백그라운드 작업을 추가하는 데 사용됩니다.

서명: BackgroundTasks(tasks=[])

from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.background import BackgroundTasks

async def signup(request):
    data = await request.json()
    username = data['username']
    email = data['email']
    tasks = BackgroundTasks()
    tasks.add_task(send_welcome_email, to_address=email)
    tasks.add_task(send_admin_notification, username=username)
    message = {'status': '가입 성공'}
    return JSONResponse(message, background=tasks)

async def send_welcome_email(to_address):
    ...

async def send_admin_notification(username):
    ...

routes = [
    Route('/user/signup', endpoint=signup, methods=['POST'])
]

app = Starlette(routes=routes)

Important

작업은 순서대로 실행됩니다. 작업 중 하나가 예외를 발생시키면, 이후의 작업들은 실행될 기회를 얻지 못합니다.