mirror of https://github.com/encode/starlette.git
64 lines
1.6 KiB
Markdown
64 lines
1.6 KiB
Markdown
|
|
Starlette includes a `BackgroundTask` class for in-process background tasks.
|
|
|
|
A background task should be attached to a response, and will run only once
|
|
the response has been sent.
|
|
|
|
### Background Task
|
|
|
|
Used to add a single background task to a response.
|
|
|
|
Signature: `BackgroundTask(func, *args, **kwargs)`
|
|
|
|
```python
|
|
from starlette.applications import Starlette
|
|
from starlette.responses import JSONResponse
|
|
from starlette.background import BackgroundTask
|
|
|
|
app = Starlette()
|
|
|
|
@app.route('/user/signup', methods=['POST'])
|
|
async def signup(request):
|
|
data = await request.json()
|
|
username = data['username']
|
|
email = data['email']
|
|
task = BackgroundTask(send_welcome_email, to_address=email)
|
|
message = {'status': 'Signup successful'}
|
|
return JSONResponse(message, background=task)
|
|
|
|
async def send_welcome_email(to_address):
|
|
...
|
|
```
|
|
|
|
### BackgroundTasks
|
|
|
|
Used to add multiple background tasks to a response.
|
|
|
|
Signature: `BackgroundTasks(tasks=[])`
|
|
|
|
```python
|
|
from starlette.applications import Starlette
|
|
from starlette.responses import JSONResponse
|
|
from starlette.background import BackgroundTasks
|
|
|
|
app = Starlette()
|
|
|
|
@app.route('/user/signup', methods=['POST'])
|
|
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': 'Signup successful'}
|
|
return JSONResponse(message, background=tasks)
|
|
|
|
async def send_welcome_email(to_address):
|
|
...
|
|
|
|
async def send_admin_notification(username):
|
|
...
|
|
|
|
```
|