658 подписчиков

Документирование. Стандарты API часть 2. Анализ скорости работы

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.

Продолжим...

Задача 2. Анализ скорости работы API

Дополните класс-клиент API методами для работы с новыми endpoints.
Исследуйте, насколько быстрее работает код с использованием сессии и обычных методов post/get для 10, 100, 1 000 запросов.
Если вы выполните это задание сразу, то не заметите значительной разницы. Дело в том, что сервер, который обрабатывает запрос, убивает соединение сразу после того, как отправит его клиенту. Вы можете убедиться в этом, включив уровень DEBUG в корневом логгере:
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-2
Чтобы исправить поведение сервера, внесите дополнительную настройку перед app.run():
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-3
Проведите восемь испытаний для каждого количества запросов:с использованием (+O) и без использования (–O) дополнительной настройки;
с использованием (+S) и без использования (–S) сессии;
с использованием (+T) и без использования (–T) параллельных запросов с помощью многопоточности (например, ThreadPool).
Занесите время работы в каждом испытании в таблицу. Её шаблон размещён в файле REPORT.md в папке с заданием.

Поехали! Потому как в описании работы у меня всегда возникают вопросы (ибо описание всегда далеко от точного понимания), я буду расписывать "по-полной программе" некоторые очевидные вещи.

Для начала я скопировал директорию app из предыдущей работы.

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-4
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-5

Ну теперь можно попробовать запустить сначала файл routes.py и только после этого clients.py. Стоп, у нас тут ошибка - 'author' тут укзано как строковая переменная, и в лекциях она была тоже строковая. Но мы же всё это дело изменили и теперь 'author' это foreign key на author_id, то есть это целое число... Можно указать любое целое число и оно запишется в БД, ведь там нет проверки на то "существует ли автор с этим id или нет". Но я всё же предпочитаю писать правду, поэтому выведу список авторов, которые есть в базе данных и только после этого изменю скрипт, куда запишу тот author_id который точно существует.

ну пусть будет Пушкин...
ну пусть будет Пушкин...

Да и 'title', я думаю не правильно оставлять в виде '123', пусть будет это каким нибудь произведением А.С.Пушкина...

ну и самое главное - указать id автора...
ну и самое главное - указать id автора...

Запускаем и смотрим:

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-8
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-9

Посмотрим после этого список книг:

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-10

Но если попытаться запустить снова скрипт clients.py, с теми же самыми данными, в частности с тем же самым названием книги, то будет ошибка. Сработает валидатор имени книги.

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-11

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

Дополните класс-клиент API методами для работы с новыми endpoints:

собственно по порядку я и пойду работать, сначала books, а затем authors
собственно по порядку я и пойду работать, сначала books, а затем authors

Я так понял, эти методы нужны будут для сравнения.... Методы связанные с /api/books:

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-13

Методы связанные с /api/books:

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-14

Теперь нам предстоит выполнить несколько (10, 100 и 1000) запросов в различных режимах. Первым делом я выполню GET запрос на получение списка авторов книг через метод класса AuthorClient. В условиях было - включить и выключить настройку: WSGIRequestHandler.protocol_version = "HTTP/1.1" и сделать замеры скорости выполнения запросов. Так как запросы получаются однотипными, я ради этого организовал декоратор, который будет измерять скорость работы функций.

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-15

Запускаем clients.py, и спустя некоторое время, у нас такой вот вывод:

С дополнительной настройкой WSGIRequestHandler.protocol_version = "HTTP/1.1"
С дополнительной настройкой WSGIRequestHandler.protocol_version = "HTTP/1.1"

Выключил WSGIRequestHandler.protocol_version = "HTTP/1.1", закомментировав эту строчку в файле routers.py и снова запустил clients.py:

без доп. настройки WSGIRequestHandler.protocol_version = "HTTP/1.1"
без доп. настройки WSGIRequestHandler.protocol_version = "HTTP/1.1"

Немного меняем код и запускаем с отключенной WSGIRequestHandler.protocol_version = "HTTP/1.1"

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-18

Теперь включаем и повторяем запросы снова.

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-19

Теперь дело за ThreadPool

без доп. настройки WSGIRequestHandler.protocol_version = "HTTP/1.1"
без доп. настройки WSGIRequestHandler.protocol_version = "HTTP/1.1"
с доп. настройкой WSGIRequestHandler.protocol_version = "HTTP/1.1"
с доп. настройкой WSGIRequestHandler.protocol_version = "HTTP/1.1"

Теперь включим использование сессии...

с доп. настройкой WSGIRequestHandler.protocol_version = "HTTP/1.1"
с доп. настройкой WSGIRequestHandler.protocol_version = "HTTP/1.1"

Ну и последний опыт, выключим доп. настройку WSGIRequestHandler.protocol_version = "HTTP/1.1"

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-23

По итогу получилась вот такая табличка:

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-24

Собственно, основная часть этого задания сделана (нужно заполнить таблицу). Сам же код - далёк от идеала. Но это работает. Конечный вариант кода, как было сказано в задании упаковал в класс, хотя не понимаю зачем, можно было оставить в функциях.

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-25
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-26
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-27
Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-28

Ну и из всего этого получается вот такой вывод:

Продолжим... Задача 2. Анализ скорости работы API Дополните класс-клиент API методами для работы с новыми endpoints.-29

Запускаем код дважды со строкой WSGIRequestHandler.protocol_version = "HTTP/1.1" и без в файле routers.py. Получившиеся данные заносим в таблицу.

Код не факт что верный, когда куратор примет, отпишусь в комментах.

Данное повествование - мой конспект, не более того, пишу я его в первую очередь для себя, дабы не забывать те темы что были пройдены, а по прошествии времени я мог к ним вернуться и посмотреть что я когда-то решал, делал. Что-то типа таблетки для памяти.

На этом у меня всё. Ставим нравлики, дизнравлики, подписки и прочее что говорит рекомендательным системам Дзена продвигать канал и публикации.