Использование async для параллельной работы

Введение в FastAPI

Matt Eckerle

Software and Data Engineering Leader

Зачем нужен async? Параллельные бургеры!

Последовательные бургеры

Клиенты в очереди за бургерами, приготовленными и поданными последовательно

Параллельные бургеры

Клиенты в очереди за бургерами, приготовленными и поданными параллельно

1 https://fastapi.tiangolo.com/async/
Введение в FastAPI

async на практике

Последовательные бургеры

Определение функции для получения бургеров

# This is not asynchronous
def get_sequential_burgers(number: int):
    # Do some sequential stuff
    return burgers

Последовательный вызов функции

burgers = get_burgers(2)

Параллельные бургеры

Определение функции для получения бургеров

async def get_burgers(number: int):
    # Do some asynchronous stuff
    return burgers

Асинхронный вызов функции

burgers = await get_burgers(2)
Введение в FastAPI

FastAPI с async

Если возможно:

results = await some_library()

Используйте async def:

@app.get('/')
async def read_results():
    results = await some_library()
    return results

Примечание Используйте await только внутри функций, созданных с async def

Введение в FastAPI

Когда использовать async

Используйте async

Если приложение ожидает ответа от внешних систем

  • Внешний API
  • База данных

Примеры

  • HTTP-запросы
  • Запросы к базам данных
  • Чтение файлов

Не используйте async

Ресурсоёмкие задачи CPU

Примеры

  • Обработка аудио или изображений
  • Компьютерное зрение
  • Машинное обучение
  • Глубокое обучение

При наличии сомнений

Введение в FastAPI

Давайте попрактикуемся!

Введение в FastAPI

Preparing Video For Download...