Реактивное движение
Приветствуем наших читателей. Мы рады видеть вас здесь, в нашем дайджесте по языку Python. Сегодня представим интересные материалы об управлении памятью, грядущих изменениях языка, а также о применении Python в области исследования космоса. В качестве бонуса отличный фреймворк для быстрого построения cloud-native сервисов.
Оптимизируем расход памяти
Представьте, что вы приложение, и вам на будущее потребовалась оперативная память. Вы пошли к операционной системе и попросили уже сейчас выделить вам N байт. Та, в свою очередь, не стала сразу выделять вам память, а выдала талончик, гарантирующий, что в нужный момент память будет выделена. Вы идете к окошку выдачи, а там очередь из таких же страждущих, с талончиками. Отстояв очередь, вы подходите к заветному окошку, но свободная память уже закончилась. Сзади бесшумно подходит OOM-killer и спустя пару мгновений вас убивает. Конец истории.
Почему вообще так произошло, и как не допустить такого грустного финала? Прежде всего, надо помнить, что память — ресурс весьма ограниченный. Так что если бы ОС вам память выделила, то ядро бы впало в панику, и все приложения перестали бы работать. Давайте теперь разбираться сколько памяти реально нужно, и как оптимизировать ее потребление.
Сначала профилирование, и тут хорошо сработает утилита memory_profiler. Она буквально построчно сможет показать, сколько памяти выделяется каждой функции. Правда, вначале исследуемую функцию придётся задекорировать. Так мы определим на какой примерно строке у нас возникает проблема.
Теперь к объектам. Здесь поможет инструмент pympler. Он даёт нам лучшее представление о размерах объектов, задействуя asizeof и прочие поддерживаемые функции. Стоит для начала внимательно изучить документацию, чтобы чётко понимать механизм действий.
И вот мы подошли к самому главному — а как оптимизировать? В качестве примера автор статьи демонстрирует замену одних модулей другими, ориентируясь на профилировщик. Так, модуль lists для генерации 10 млн значений потребует более 350 Мбайт. Простой выбор другого модуля array для этой же операции займет чуть более 100 Мбайт. Разница очевидна. Если нужно много математических операций, то выбираем модуль numpy и получаем 123 Мбайт. Помимо таких достаточно очевидных нюансов в статье есть достаточно чёрной магии в виде сокращения размера объектов за счёт явного объявления атрибутов класса.
Меняем отработанные батарейки
Batteries included — философия, исповедуемая Python, и сделавшая его одним из самых популярных языков программирования в мире. Стандартная библиотека очень богата и её хватит на решение большого спектра задач. Устанавливать дополнительные пакеты не потребуется. В целом такой подход себя оправдал, но со временем возникла серьёзная проблема — стандартная библиотека включала в себя инструменты, которыми перестали пользоваться.
Например, в стандартной библиотеке Python есть такой модуль uu. Во времена активного развития сети Fidonet для передачи файлов часто использовали метод uuencode. Суть его в представлении любых бинарных файлов в виде простого текста. Таким образом, даже в среде, изначально предназначенной только для текстов, стало возможным передавать по сути любые файлы. Матёрые фидошники называли такое действие словом ююкнуть.
Увы, сей способ безнадежно устарел, а UUE сменился стандартом MIME, созданным специально для передачи разных данных посредством электронной почты. Fidonet, хотя и до сих пор существует благодаря некоторым энтузиастам, фактически заброшен и массово не используется. Практического смысла оставлять модуль uu в стандартной библиотеке Python нет.
Итогом обсуждения судьбы таких модулей стал документ PEP 594 – Removing dead batteries from the standard library. Предполагается, что подобная массовая чистка стандартной библиотеки будет разовым событием, а в дальнейшем сообщество станет больше уделять времени поддержке и актуализации существующих модулей. Руководящий совет Python обратил особое внимание на необходимость регулярной проверки стандартной библиотеки, чтобы избежать таких ситуаций в будущем.
Беглый взгляд на Python в NASA
Scientific computing одна из самых сильных сторон языка Python. Как упоминалось в статье Кондрада Хинсена, одного из пионеров использования Python в научных вычислениях, у языка есть две важных особенности. Первая — типы данных, спроектированных для удобного взаимодействия между разнородными приложениями. Вторая — наличие утиной типизации вместе с универсальным набором простых интерфейсов. Обе эти особенности позволяют легко интегрировать код на Python с кодом на других языках, хотя и не без ограничений.
Так что было бы странно, если бы в NASA не использовали Python. Убедиться в этом легко, заглянув на портал code.nasa.gov. Тут множество проектов, начиная от модуля для поддержки IPv6 и заканчивая фреймворком для симуляции поведения летательных аппаратов. Здесь опыт специалистов высшего уровня становится доступным для разработчиков всего мира.
Совсем недавно телескоп James Webb был полностью откалиброван и готов к работе. И да, там тоже используется Python, что стало очередной темой подкаста Talk Python To Me. Мы в Evrone любим этот подкаст и в прошлом году с удовольствием пообщались с его автором и бессменным ведущим, Майклом Кеннеди.
Minos — идеально для микросервисов
На сладкое сегодня реактивный фреймворк Minos. Он позволяет быстро создавать сервисы и «из коробки» имеет реализации под многие вещи (базы данных, API-шлюз, асинхронная коммуникация). Прелесть в том, что эти сервисы создаются изначально cloud-native и будут использовать все возможности, которые предоставляют современные облака.
Начать с ним работу не представляет сложности. Есть превосходный туториал в деталях рассказывающий об особенностях фреймворка и построения своего первого сервиса. Minos использует большинство возможностей паттерна Event sourcing, а следовательно достигается атомарность операций и надёжное хранение событий. Таким образом любое состояние объекта может быть воспроизведено, что весьма важно для реализации бизнес-логики.
Обучение
Курс Python в Evrone Academy
60 учебных модулей
Если вы думаете о смене работы или хотите стать частью нашей команды, но у вас недостаточно коммерческого опыта, то теперь можно учиться прямо в Evrone. А после — попасть к нам на оплачиваемую стажировку.
Основа обучения в Evrone Academy — наши высокие требования к разработчикам и опыт в проектах. Мы записали лекции, подготовили текстовые версии, добавили практические задания — это позволит вам подтянуть знания до middle-уровня. На стажировке мы дополним теорию практикой, а после — добро пожаловать на «боевой» проект.
Сейчас академия доступна в режиме early access — можно пройти базовые части по Python или Ruby. Но мы уже готовим новые материалы и практические задания, подписывайтесь на нас в соцсетях, чтобы не пропустить обновления!
Конкурсы для разработчиков
Python Quiz
до 21 апреля 2022
Если хотите быстро проверить себя, а на технические собеседования не готовы — участвуйте в новом квизе по языку Python.
Его составляли наши опытные разработчики, так что придётся хорошо подумать. Внутри сложные вопросы и несколько вариантов ответов. Лишь один — верный.
Среди тех, кто правильно ответит на все вопросы мы разыграем Яндекс.Станцию. Подписывайтесь на наши соцсети, чтобы не пропустить прямую трансляцию розыгрыша.
Митапы
Python meetup
19:00
Рады сообщить, что у нас запланирован Python Meetup, который пройдёт 13-го апреля. Наш DevRel летит с докладом на PyCon DE и, если звезды сложатся удачно, то онлайн трансляция митапа будет проведена с главной европейской Python-конференции! Детальная информация о мероприятии будет опубликована позже, следите за нашими новостями.
Вакансии
Evrone
Мы открыты для новых Python-разработчиков. Evrone работает удалённо с первого дня, участие в Open-source проектах оплачивается, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.