Рубрики
Без рубрики

Применение профилирования колбы для повышения производительности

В моем предыдущем опыте мои колбы были довольно простыми, и все работало так же, как это было … Теги с Python, колбой, профилированием.

В моем предыдущем опыте мои фляски были довольно простыми, и все работало так, как было создано с нуля. Я любил это, но тогда произошло неизбежное: мое приложение действительно медленно И я Имел сделать что-то об этом. В этом посту я расскажу мою историю о том, как искать узкое место моего приложения Flask, решая проблему и поделитесь некоторыми удивительными инструментами, которые я использовал для него.

Таким образом, у меня есть приложение для колба и база данных MySQL, которая содержит множество сверхстепенных объектов в одну ко многим. И говоря «суперподневно», я не гиперболизую: объект всего 3000 столовных рядов из пяти разных таблиц является общим корпусом. В начале все было хорошо, но в какой-то момент обработка запрос начал брать 3-5 или даже 10 секунд! Ой. Мой. Бог. Это было то, что я не хотел идти, поэтому я начал думать, что может вызвать проблему.

Сначала я наивно прошел через мою кодовую базу и попытался определить область возможного узкого места. Ответ, казалось, был очевиден: я использую библиотеку зефира в сериал и проверку данных перед вставкой и после выбора его из базы данных. Это так, верно? Googling “Barshmallow + Slow” вернул несколько статей, которые подтвердили мои подозрения: это библиотека. Один из статей, которые я обнаружил, был некоторыми ребятами из Лифы, которые сказали: «Мы используем зефир, и это так медленно, поэтому мы создали поджаренные зефир, которые в 15x раз быстрее». Удивительно! – подумал я. Это то, что мне нужно. В этот момент мои запросы заняли в среднем три секунды. Поэтому я обновил свой код, чтобы использовать поджаренные зефир и подготовил себя красной полосой и ножницами. Отправил запрос … BAM. Шесть секунд. Это было впечатляюще.

Я получил довольно расстроен, потому что я думал, что должен переписать половину логики моего приложения. И тогда коллега спросил меня, попытается ли я использовать профилировщик? Да, на данный момент я должен признать, что не знал, что профилировщики существовали. Я счастлив, что я знаю сейчас, хотя!

Что такое профилирование кода? Короче говоря, это инструмент для анализа динамического кода, который помогает обнаружить проблемы с производительностью, также известным как узкие места вашей программы. Профессионал собирает информацию о различных показателях того, как работает ваша программа, и основана на этой информации, которую вы можете определить, где перейти с оптимизацией кода.

Есть много профилирования инструментов для Python Code, и большинство из них являются встроенным профилем или CPROFIL. Поскольку я говорю о приложении Flask, давайте посмотрим, что особенно для этого мир. Есть красивый lib под названием Flask-Profiler , который имеет веб-интерфейс с некоторыми крутыми функциями, такими как маршрут или фильтры даты. Но с колбой также имеет встроенный в профилировании Werkzeug.   Это выглядело удивительно легко в использовании, так что это был первый – и последний – один, который я пытался. Чтобы использовать встроенный профилировщик, вам нужно добавить только две строки кода в ваш проект:

from werkzeug.middleware.profiler import ProfilerMiddleware
app = ProfilerMiddleware(app)

Вы также можете настроить его, например, указать profile_dir или установить Ограничения Для статистики вы хотите увидеть.

После добавления двух строк перед колбой app.run () функции и выполнение программы, обзор результата по каждому запросу будет отображаться в стандартном выводе. Иногда этот короткий результат может дать вам представление о том, что снижает вашу программу. Но обычно это интересно увидеть подробный анализ, который введен в выбранный каталог профилей как * .PROF файлов.

Есть несколько инструментов для визуализации профилей. Некоторые из них обеспечивают полный GUI для навигатига в результатах вашего профилирования ( Runsnakerun ), некоторые из них представляют результат анализа как график ( GPROF2DOT ). Я остановился на Снейкивиз Это визуализатор на основе браузера. Это легко установлено с использованием Пип устанавливает Snakeviz , а потом просто беги со змеиным profile_dir. Результат выглядит что-то подобное, и вы можете погрузиться в каждой из визуальных частей, чтобы увидеть его более тесную деформацию, которая на мой взгляд, является супер прохладным и удобным.

Проанализировав визуальное представление результатов профилирования, оказалось, что большинство моих проблем с производительностью исходили от взаимодействия базы данных услуг. Когда я точно знал, какие строки кода предприняли не значительно много времени, чтобы выполнить, я смог решить свои проблемы, переписать запросы или улучшение самого кода. Улучшение работы кода с помощью расширения взаимодействия базы данных является темой для всей новой статьи, поэтому я, вероятно, напишу о своем опыте с ней позже.

Подводя итоги: конечно, автоматические профилировщики не идеальны, и они не будут на 100%, покажи вам ошибки в вашем коде. Иногда это просто «уставившись на ваш код», который на самом деле работает действительно хорошо. Но, по крайней мере, с помощью профилировщиков вы можете обнаружить слабую область, которая в большинстве случаев более чем достаточно.

Спасибо за чтение, и я надеюсь, что это было как-то полезно.:)

Оригинал: “https://dev.to/yellalena/profiling-flask-application-to-improve-performance-4970”