Background
Starlette includes aBackgroundTask class for in-process background tasks.
A background task should be attached to a response, and will run only oncethe response has been sent.
Background Task
Used to add a single background task to a response.
Signature:BackgroundTask(func, *args, **kwargs)
fromstarlette.applicationsimportStarlettefromstarlette.responsesimportJSONResponsefromstarlette.routingimportRoutefromstarlette.backgroundimportBackgroundTask...asyncdefsignup(request):data=awaitrequest.json()username=data['username']email=data['email']task=BackgroundTask(send_welcome_email,to_address=email)message={'status':'Signup successful'}returnJSONResponse(message,background=task)asyncdefsend_welcome_email(to_address):...routes=[...Route('/user/signup',endpoint=signup,methods=['POST'])]app=Starlette(routes=routes)
BackgroundTasks
Used to add multiple background tasks to a response.
Signature:BackgroundTasks(tasks=[])
fromstarlette.applicationsimportStarlettefromstarlette.responsesimportJSONResponsefromstarlette.backgroundimportBackgroundTasksasyncdefsignup(request):data=awaitrequest.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':'Signup successful'}returnJSONResponse(message,background=tasks)asyncdefsend_welcome_email(to_address):...asyncdefsend_admin_notification(username):...routes=[Route('/user/signup',endpoint=signup,methods=['POST'])]app=Starlette(routes=routes)
Important
The tasks are executed in order. In case one of the tasks raisesan exception, the following tasks will not get the opportunity to be executed.