Крупнейшая европейская конференция по Python ранее увидела солнечные итальянские пляжи и скалистые утесы Шотландии. В 2019 году он снова переехал — на этот раз в швейцарский город Базель, известный раклетом, перочинными ножами и невероятно высокими ценами на пиво.

Поскольку мы в Kiwi.com любим учиться и открывать для себя интересные места, мы не могли пропустить EuroPython в этом году.

Ознакомьтесь с некоторыми из наших заметок и идей.

Истории Питона

Давным-давно, в далеком 1989 году, Гвидо искал хобби-проект, чтобы занять себя на рождественские каникулы, и он решил начать писать интерпретатор для нового языка сценариев… Вы, наверное, знаете, как началась история проекта Python, но Вы когда-нибудь задумывались, как выглядела первая версия Python в 1994 году? Насколько он отличался от языка, который мы используем сегодня?

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

Еще одна важная веха в истории Python произошла в 2000 году. Тогда был выпущен Python 2.0, что привело к значительным изменениям в форме лицензии, совместимой с GPL. Да, мы все хотели бы, чтобы так было и с переходом от 2 к 3.

Python и его слабые стороны: некоторые замечания к пятничному основному докладу

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

Однако, если мы действительно пытаемся найти слабость, это производительность. Python медленный, — обычно говорят люди. Его производительность также была темой пятничного выступления Виктора Стиннера, основного разработчика CPython, который выступил с докладом под названием Производительность Python: прошлое, настоящее и будущее.

Его доклад был отличным обзором ограничений и узких мест переводчика. Различные проекты пытались улучшить производительность интерпретатора, но большинство из них потерпели неудачу. Многие амбициозные проекты, поддержанные крупными компаниями, были остановлены после того, как выяснилось, что достичь цели сложнее, чем ожидалось.

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

Самое главное — правильно измерить производительность многопоточных систем и влияние GIL. Правильный анализ и меткая оптимизация могут решить проблемы. Другой вариант — использовать Cython для выполнения критического кода или попробовать некоторые ориентированные на производительность альтернативы интерпретатору CPython, такие как PyPy или Numba.

Эти инструменты могут помочь, но они также имеют некоторые недостатки, которые необходимо учитывать. Есть много идей для будущих улучшений, таких как новый C API, сборщик мусора с трассировкой и многие другие многообещающие функции.

Грамматика CPython

Участие в разработке CPython — непростая работа. Пабло Сальгадоин, еще один основной разработчик CPython, в докладе под названием Душа зверя описал, как определяется и анализируется грамматика Python. Парсер нашего любимого многофункционального языка использует грамматику LL(1)! Ты можешь в это поверить?

Здесь применим принцип Zen of Python «Просто лучше, чем сложно», и простая грамматика делает язык легким для чтения и для нас, людей.

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

@lambda x: 32
def f():
 return “Larry Hastings”

Можете ли вы угадать, что эта функция возвращает при вызове?

EuroPython и машинное обучение: TensorFlow 2.0 и повышение градиента в scikit-learn 0.21

Поскольку Python в настоящее время является предпочтительным языком программирования для специалистов по данным и специалистов по машинному обучению, эта область также была широко представлена ​​на EuroPython 2019.

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

Новейшие разработки с TensorFlow были освещены в двух докладах: TensorFlow 2.0: TensorFlow наносит ответный удар Микеле Де Симони и Глубокое обучение с TensorFlow 2.0 Брэда Миро, инженера-программиста из Google.

Первое отличие состоит в том, что новая версия будет поставляться с новыми библиотеками для развертывания обученных моделей. Примерами являются серверы таргетинга TensorFlow Extended и TensorFlow Lite для мобильных и небольших устройств, таких как Raspberry Pi.

А как насчет обучающего интерфейса? В новой версии мы потеряли библиотеку tf.contrib, которую посчитали слишком запутанной и перенесли в отдельный проект. Основное изменение заключается в том, что функции управления, такие как tf.cond, tf.while_loop и особенно Session.run, больше не используются. Они были заменены операторами управления из самого Python и интеграцией Keras в качестве основного высокоуровневого интерфейса в tf.keras.

Для тех, кто беспокоится, Keras продолжит существовать как отдельный проект, поддерживающий различные бэкенды, такие как Theano или CNTK. Единственное отличие состоит в том, что теперь он удобно доставляется в tensorflow.keras.

Еще одна долгожданная функция — Автограф. Это простой инструмент, который добавляет возможность переписать любой код Python в собственный код TensorFlow, просто добавив @tensorflow.function в качестве декоратора, что может ускорить выполнение на порядок десятков или сотен.

Чтобы попробовать эти и многие другие функции, вы можете установить бета-версию с помощью pip install -U –pre TensorFlow.

Повышение градиента в scikit-learn 0.21

Еще один доклад, о котором стоит упомянуть, — Усиление градиента на основе гистограммы в scikit-learn 0.21 Оливье Гризеля, основного разработчика scikit-learn.

Его выступление демонстрирует, что глубокое обучение не является панацеей от всех проблем машинного обучения, и нейронные сети не всегда должны быть решением. Scikit-learn предоставляет множество готовых алгоритмов машинного обучения, которые можно переключать практически без усилий. Этому способствует красивый однородный API (подгонка/прогнозирование/преобразование), и в результате он создает уникальный инструмент для метаобучения.

Изюминкой доклада стала презентация новой реализации Gradient Boosting на основе гистограмм, оптимизированной для обучения на огромных наборах данных. Этот алгоритм сравнивали с Multilayer Perceptron, предыдущей реализацией Gradient Boosting и Random Forrest в наборе данных о ценах на недвижимость.

MLP достигла ошибки 0,215 за 8,41 секунды обучения, Gradient Boosting достигла 0,187 за шесть секунд, а Random Forrest достигла 0,192 за 4,65 секунды. Новое усиление градиента на основе гистограммы достигло той же производительности, что и оригинал. Так в чем же польза спросите вы?

Этот алгоритм может работать на наборах данных с десятками сотен миллионов выборок данных, что является основным недостатком традиционного повышения градиента. Еще одним преимуществом является то, что обученная модель может оценивать данные всего за ~ 4 мкс, что примерно в сто раз быстрее, чем Random Forrest. Дополнительным бонусом является то, что размер обученной модели составляет всего 2,4 МБ, что делает ее идеальной для устройств с дефицитом памяти, по сравнению с 152,2 МБ, требуемыми для Random Forrest.

Kiwi.com делится опытом

Помимо путешествий, на Kiwi.com мы любим еще несколько вещей — мы любим технологии и любим Python. Большинство наших серверных сервисов написано на Python. Мы ежедневно занимаемся проектированием программного обеспечения и API, асинхронными задачами, рефакторингом кода и совместной работой в больших командах. Два наших опытных инженера поделились своим опытом в Базеле в этом году.

Рефакторинг в Python

Тин Маркович, глава отдела в племени Booking, говорил о Рефакторинге в Python. Он указывает, почему важно использовать автоматизированные линтеры и средства проверки кода, такие как Pylint, MyPy, Black и Coala. Лучший подход — сделать их частью конвейера CI/CD, особенно при работе в больших командах.

Примечание: если вы хотите получить более подробное объяснение фактической настройки CI, ознакомьтесь с этой записью в блоге.

Используя реальные примеры кода, Тин также представил некоторые паттерны и антипаттерны — все это выучилось на собственном горьком опыте на кодовых базах Kiwi.com. Одна вещь, которую вы всегда должны иметь в виду, это то, что код пишется для замены. Чем меньше взаимозависимости, тем лучше. Хороший код можно легко использовать повторно, корректировать или даже заменять без каких-либо проблем.

Различные виды очередей для асинхронных вызовов

Что нужно и чего нельзя делать с очередями задач — так называется выступление Петра Стелика, разработчика команды Финансы. Петр объясняет проблемы использования различных видов очередей для асинхронных вызовов.

Его рассказ о первоначальном дизайне нового проекта на основе Redis Queues, который оказался не самой лучшей идеей. Когда участники проекта поняли, что он не масштабируется для их варианта использования, они решили вместо этого использовать старый добрый Сельдерей. Урок, который они усвоили, заключается в том, что новый подход не всегда лучше, чем хорошо проверенное решение, принятое многими другими командами в компании.

Петр также обобщает принципы, которых следует придерживаться при настройке очередей задач, и советует, что следует учитывать при написании асинхронных вызовов.

Посетите официальный канал EuroPython на YouTube. Все доклады издания 2019 года будут добавлены в ближайшее время.

Бассейн и другие виды вечеринок

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

Наша комьюнити-команда организовала специальную вечеринку Kiwi.com в пабе и две вечеринки на крыше у бассейна на крыше квартиры. Посетители EuroPython могли присоединиться к нам, поплавать, выпить и насладиться вечером вместе с нами. Атмосфера была довольно непринужденной, так что это была отличная возможность пообщаться в неформальной обстановке со многими замечательными людьми с конференции.

Еще одно замечательное мероприятие закончилось, но не волнуйтесь, скоро мы будем на других технических конференциях. Загляните на стенд Kiwi.com, чтобы поболтать, и не забудьте попросить билет на вечеринку!