Метод add_task
Метод add_task применяется к экземпляру класса BackgroundTasks
и регистрирует функцию, которая будет выполнена в фоне
после того, как FastAPI отправит ответ клиенту.
Первым параметром передаётся вызываемая функция,
а далее - позиционные и именованные аргументы для неё.
Это удобно для отправки писем, записи логов, обработки изображений
и других задач, не требующих немедленного результата.
Синтаксис
background_tasks.add_task(func, *args, **kwargs)
Пример
Давайте добавим простую фоновую задачу, которая пишет сообщение в консоль:
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def write_log(message: str):
print(message)
@app.get('/')
def index(background_tasks: BackgroundTasks):
background_tasks.add_task(write_log, 'hello')
return {'text': 'article'}
Результат выполнения кода для адреса /:
{"text": "article"}
После отправки ответа в консоль выведется строка:
"hello"
Пример
Давайте передадим в фоновую задачу несколько аргументов, включая именованный:
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def send_email(user: str, message: str, repeat: int = 1):
for _ in range(repeat):
print(f'{user}: {message}')
@app.get('/notify/{user}')
def notify(user: str, background_tasks: BackgroundTasks):
background_tasks.add_task(send_email, user, 'abcde', repeat=2)
return {'status': 'user'}
Результат выполнения кода для адреса /notify/user:
{"status": "user"}
После отправки ответа в консоль выведется:
"user: abcde"
"user: abcde"
Пример
Давайте добавим несколько фоновых задач в одном обработчике:
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def task_one():
print('hello')
def task_two():
print('abcde')
@app.get('/tasks')
def tasks(background_tasks: BackgroundTasks):
background_tasks.add_task(task_one)
background_tasks.add_task(task_two)
return {'status': 'article'}
Результат выполнения кода для адреса /tasks:
{"status": "article"}
После отправки ответа в консоль выведется:
"hello"
"abcde"
Смотрите также
-
класс
BackgroundTasks,
который управляет выполнением фоновых задач -
метод
add_task,
который добавляет функцию в очередь фоновых задач -
метод
BackgroundTasks,
который позволяет выполнять задачи после ответа -
метод
add_task,
который принимает аргументы для фоновой функции