Боб Бельдербос: Одно ядро, два... Заметка
Planet Python на русском

Боб Бельдербос: Одно ядро, два интерфейса, без переписывания

Автор Ask the Canon создал приложение, сначала реализовав основную функциональность, а затем добавив интерфейсы, следуя подходу "функциональное ядро и тонкие адаптеры". Ядро состоит из нескольких чистых функций в одном модуле, включая embed, load_library, search_passages и reflow, которые используются как интерфейсом командной строки, так и веб-приложением. Функция load_library не дешева в вызове, поэтому автор использовал кеширование для повышения производительности, а декоратор cache превращает первый вызов в поиск по словарю. Чтобы первый посетитель не платил за накладные расходы на загрузку библиотеки, автор использовал жизненный цикл FastAPI для предварительного прогрева библиотеки и загрузки моделей в ОЗУ перед первым запросом. Автор также использовал ленивую загрузку, чтобы отложить загрузку модели sentence-transformers до тех пор, пока она действительно не понадобится. Дизайн приложения использует функции вместо простых данных, без необходимости в классах, а основные функции легко повторно использовать в новых интерфейсах. Автор подчеркивает важность инженерного суждения при создании приложений, особенно при переходе от прототипа к производству. Архитектура приложения спроектирована так, чтобы быть гибкой и масштабируемой, с четким разделением между основной функциональностью и интерфейсами. Автор планирует обсудить приемы постобработки для улучшения результатов приложения в будущей публикации. Использование кеширования, ленивой загрузки и предварительного прогрева способствует производительности и эффективности приложения.