Перейти к содержанию

Фоновые задачи

Starlette включает в себя функцию для фоновых задач внутри процесса BackgroundTask категории.

К ответу должна быть добавлена фоновая задача и выполняться только один раз после отправки ответа.

фоновые задачи

Добавление одной фоновой задачи в ответ.

Подпись: BackgroundTask(func, *args, **kwargs)

from Starlette.applications import Starlette
from starlette. response import JSONResponse
От Starlet.routing Import Route
from starlet.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': 'Signup successful'}
    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(tasks=[])

from Starlette.applications import Starlette
from starlette. response 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': 'Signup successful'}
    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)

!!! Важные задачи выполняются последовательно. Если одна из задач вызывает исключение, последующие задачи не будут выполнены.