Русский
Русский
English
Статистика
Реклама

Ещё раз о производительности фреймворков Python для веб разработки

Недавно мне пришлось начинать проект нового веб сервиса, и я решил протестировать максимальную нагрузочную способность Django, а заодно сравнить её с Flaskом и AIOHTTP. Результат показался мне неожиданным, поэтому я просто оставлю его тут.

На диаграммах ниже приведены результаты простейшего Apache Benchmarka для фреймворков Django версии 3.1, Flask 1.1 и AIOHTTP 3.7. AIOHTTP работает в штатном однопоточном асинхронном режиме, Django и Flask обслуживаются синхронным WSGI сервером Gunicorn с числом потоков, равным числу доступных ядер процессора * 2. ASGI в тесте не участвовал.

Условия тестирования
Во всех трёх случаях выводится простая страница со списком по результатам выборки из реляционной базы данных PostgreSQL. Запрос я постарался сделать максимально приближенным к реальности:

SELECT r.id, r.auth_user_id, r.status, r.updated, r.label, r.content, u.username,    ARRAY_AGG(t.tag) tag, COUNT(*) OVER() cnt,    (        SELECT COUNT(*) FROM record r2            WHERE                r2.parent_id IS NOT NULL                AND r2.parent_id = r.id                AND r2.status = 'new'    ) AS partsFROM record rJOIN auth_user u ON u.id = r.auth_user_idLEFT JOIN tag t ON t.kind_id = r.id AND t.kind = 'rec'WHERE r.parent_id IS NULL AND r.status = 'new'GROUP BY r.id, u.usernameORDER BY r.updated DESCLIMIT 10 OFFSET 0

Этот запрос получает список корневых записей из основной таблицы приложения, число прямых потомков для каждой строки, данные владельца записи, список тегов и общее число строк выборки.

AIOHTTP использует пулл соединений с БД и драйвер asyncpg, Django и Flask SQLAlchemy без ORM (для чистоты эксперимента) и psycopg2.

Приложение Django создано стандартными средствами фреймворка (django-admin startproject, manage.py startapp и т.д.), вывод тестовой страницы через ListView. Установки Flask и AIOHTTP построены на канонических веб приложениях Hello, world, взятых из документации.

Результаты запуска теста на локальной машине (4 ядра CPU)



и на реальном однопроцессорном VDS (пинг около 45 ms)



Во время теста AIOHTTP использовал 100% одного ядра CPU, Flask и Django 100% всех доступных ядер.

Выводы


На самом деле, сравнение асинхронных и многопоточных приложений не совсем корректно они решают разные задачи. Поэтому, результат выглядит довольно логичным: в локальном тесте у AIOHTTP просто оказалось меньше ресурсов, при равных условиях производительность нивелируется.

А вот скромный результат Flaskа с трудом поддается объяснению, разогнать этот фреймворк у меня не получилось.
Источник: habr.com
К списку статей
Опубликовано: 23.12.2020 10:20:51
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Высокая производительность

Разработка веб-сайтов

Python

Django

Flask

Aiohttp

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru