• en
  • Language: ru
  • Documentation version: 1.1.x

Стать большим

Вот ваши возможности при расширении кодовой базы или масштабировании приложения.

Читайте источник.

Flask появился отчасти для того, чтобы продемонстрировать, как можно построить собственный фреймворк поверх существующих хорошо используемых инструментов Werkzeug (WSGI) и Jinja (шаблонизация), и по мере своего развития он стал полезен широкой аудитории. Наращивая свою базу кода, не просто используйте Flask - поймите его. Читайте исходники. Код Flask написан для того, чтобы его читали; его документация публикуется для того, чтобы вы могли использовать его внутренние API. Flask придерживается документированных API в вышестоящих библиотеках и документирует свои внутренние утилиты, чтобы вы могли найти необходимые для вашего проекта точки привязки.

Крючок. Удлинить.

Документация API полна доступных переопределений, точек подключения и Сигналы. Вы можете создавать пользовательские классы для таких вещей, как объекты запроса и ответа. Копайтесь глубже в API, которые вы используете, и ищите настройки, которые доступны в релизе Flask. Ищите способы, с помощью которых ваш проект может быть рефакторингован в набор утилит и расширений Flask. Изучите множество Расширения в сообществе и поищите шаблоны для создания собственных расширений, если вы не найдете нужных вам инструментов.

Подкласс.

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

Обертывание с помощью промежуточного программного обеспечения.

В главе Диспетчеризация приложений подробно показано, как применять промежуточное ПО. Вы можете внедрить промежуточное ПО WSGI, чтобы обернуть ваши экземпляры Flask и внести исправления и изменения на уровне между вашим приложением Flask и HTTP-сервером. Werkzeug включает в себя несколько middlewares.

Вилка.

Если ни один из вышеперечисленных вариантов не работает, форкните Flask. Большая часть кода Flask находится внутри Werkzeug и Jinja2. Эти библиотеки выполняют большую часть работы. Flask - это просто паста, которая склеивает их вместе. В каждом проекте есть момент, когда базовый фреймворк начинает мешать (из-за предположений, которые были у первоначальных разработчиков). Это естественно, потому что если бы это было не так, то фреймворк был бы очень сложной системой, которая вызывает крутую кривую обучения и много разочарований у пользователей.

Это не уникальное явление для Flask. Многие люди используют исправленные и модифицированные версии своих фреймворков для борьбы с недостатками. Эта идея также отражена в лицензии Flask. Вам не нужно вносить изменения обратно, если вы решили модифицировать фреймворк.

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

Масштабируйте как профессионал.

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

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

Существует только один ограничивающий фактор в отношении масштабирования во Flask - это контекстные локальные прокси. Они зависят от контекста, который во Flask определяется как поток, процесс или гринлет. Если ваш сервер использует какой-либо вид параллелизма, не основанный на потоках или гринлетах, Flask больше не сможет поддерживать эти глобальные прокси. Однако большинство серверов используют для достижения параллелизма либо потоки, либо гринлеты, либо отдельные процессы, и все эти методы хорошо поддерживаются базовой библиотекой Werkzeug.

Обсудите с сообществом.

Разработчики Flask поддерживают доступность фреймворка для пользователей с большими и маленькими кодовыми базами. Если вы обнаружили на своем пути препятствие, вызванное Flask, не стесняйтесь связаться с разработчиками в списке рассылки или на сервере Discord. Лучший способ для разработчиков Flask и расширений Flask улучшить инструменты для больших приложений - это получить обратную связь от пользователей.