Cython, Flask и Quart

09 августа 2023
Cython, Flask и Quart

Жаркий июль закончился, на дворе август. Нас порадовали мажорным релизом компилятора Cython, которого ждали несколько лет. Также мы решили узнать, в чём разница между двумя микрофреймворками Flask и Quart, а также нашли отличную статью про тонкости популярных конструкций, таких как with…contextmanager. Приятного чтения!

Вышел Cython 3.0

Этого события ждали несколько лет. Причина столь долгой работы над релизом в желании сохранить обратную совместимость с предыдущими версиями Cython. Все актуальные на момент релиза версии CPython поддерживаются в Cython, включая даже экспериментальную 3.12. Python 2.6 на последней валькирии отправился в Вальхаллу, его поддержка была прекращена.

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

Ответ на это безобразие: Pure Python mode, использующий только общепринятый синтаксис Python. Раньше часть кода, например функции для вызова внешних библиотек на C, в этом режиме не поддерживалась. Сейчас же весь код в режиме Pure Python можно «причёсывать» питонячьими линтерами и не испытывать при этом мучительных страданий.

Ещё одним нововведением стала улучшенная поддержка NumPy. Cython давно позволял нативно писать функции внутри NumPy, но в некоторых случаях разработчики натыкались на разного рода ограничения. Теперь же можно, например, писать универсальные функции NumPy прямо в Cython и применять ко всему содержимому структуры данных.

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

Вот такие вот нововведения принес нам Cython 3.0. Обновление — хороший повод попробовать его в деле. За деталями советуем заглянуть в детальный Changelog релиза.

Микрофреймворк Quart

Любой Python-разработчик хотя бы раз в жизни слышал про микрофреймворк Flask. Он очень крут, но делает упор на простоту и консервативность. Если вам хочется тоже самое, что и Flask, но стильно, модно, молодёжно — рекомендуем обратить внимание на Quart. Это тоже микрофреймворк для веб-разработки, имеющий несколько важных отличий от Flask.

В комплекте с Quart идёт ASGI (асинхронный серверный интерфейс шлюза). Он поддерживается многими приложениями и платформами, так что с интеграцией не должно возникнуть проблем. Ещё одним способом взаимодействия будет старый добрый WSGI (интерфейс шлюза веб-сервера). Это один из штатных способов объединения нескольких приложений для обработки одного запроса. Реализация этого стандарта описана в PEP 3333.

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

Подведём итог: оба микрофреймворка облегчают жизнь разработчиков, а также делают веб-разработку на Python лёгкой и предсказуемой. Но там, где Flask пользуется исключительно проверенными методами и строго следит за соблюдением концепции микрофреймворка, Quart позволяет себе больше свободы. За счёт этого, его можно назвать более современным и продвинутым. 

Разумеется, оба имеют собственные уникальные фичи и ограничения. Но то, что есть альтернатива — приятно. 

Тонкости популярных конструкций

О отличие от обычного, синтаксический сахар чаще всего полезен. И в Python его много. Привыкая к удобным конструкциям, мы перестаём задумываться о том, как они устроены внутри и какие задачи призваны решать. Чтобы лучше разобраться во всех этих моментах самому, а также помочь другим, Павел Корсаков из Beeline Cloud написал статью, в которой разобрал конструкцию withcontextmanager.

Присмотритесь повнимательнее к with…contextmanager: напоминает try…except. Если вы тоже поймали себя на этой мысли, то ваша интуиция вас не подвела — именно эта конструкция лежит в основе. Появилась она достаточно давно в таких языках как Ada, C++ и Java. Становится очевидно, что именно там её и подсмотрел Гвидо Ван Россум.

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

Теперь давайте посмотрим на историю with. Этот оператор изначально задумывался в качестве альтернативы try…finally. Чтобы объяснить, как это работает, советуем взглянуть на пример:

def foo():
    try:
        a = 5 / 0
    finally:
        print('finally 1')
    print('finally 2')

Как только интерпретатор дошёл до try, он запомнил контекст (текущий набор данных). Далее возможно два варианта развития событий:

  1. Если код внутри try не генерирует исключений, то интерпретатор запустит код в блоке finally и далее продолжит выполнение.
  2. Если код внутри try сгенерировал исключение, то после запуска finally программа завершится, т.к. имеется необработанная ошибка.

Очевидно, что в примере выше события будут развиваться по второму варианту. В выводе будет «finally 1» и код ошибки. Вывода «finally 2» мы не увидим.  

Но если мы то же самое реализуем с помощью менеджера контекста, поведение кода поменяется и станет удобнее. Задача конструкции with сделать так, чтобы гарантировать корректное завершение, например, закрытие файла, вне зависимости от того, чем закончится выполнение вложенного кода.

За подробностями и примерами с with…contextmanager, рекомендуем заглянуть в оригинальный текст статьи на Хабре. И если она вам понравилась, то не поленитесь поставить автору плюс в карму.

Митапы

Онлайн

Python meetup

29 ноября 2023

Рады сообщить, что у нас запланирован осенний Python Meetup. Программа мероприятия формируется. Заявки на участие спикера принимаются до 10 ноября.

Теперь следить за митапами Evrone стало удобнее. В Telegram-канале Evrone meetups мы выкладываем анонсы с подробными описаниями докладов, а также студийные записи после мероприятий. А ещё, у нас можно выступить, мы поможем оформить вашу экспертизу в яркое выступление. Подписывайтесь и пишите @andrew_aquariuss, чтобы узнать подробности.

Регистрация

Вакансии

Удаленка / Офис

Evrone 

Мы рады новым Python-разработчикам. Удалённая работа с первого дня, помощь в подготовке выступлений на профессиональных конференциях, поощрение и оплата участия в Open-source проектах. Прозрачный способ увеличить грейд через обучение и проверку навыков под контролем ментора. Здесь есть понимание как организовать разработку комфортно и эффективно. Присоединяйтесь!

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.