Slide 1

Slide 1 text

Python ускоряется? Новости с полей и Python Language Summit 2021

Slide 2

Slide 2 text

2 Кто я? Python ускоряется? — Меня зовут Аникин Денис — Увлекаюсь fullstack: разрабатываю на python и typescript — Занимаюсь развитием Dev(Sec?)Ops практик — team lead в команде Chat, Raiffeisenbank — community lead, Python community Raiffeisenbank — https://xfenix.ru/ мой сайт — В айти давно, но пока не выгорел (чем отличается программист от лампочки? Лампочка после перегорания не работает)

Slide 3

Slide 3 text

3 О чём доклад? Python ускоряется? — В очередной раз о скорости python — О том как этот аспект собираются улучшать (и уже улучшают) — Частично о том куда развивается язык — О новостях Python Language Summit 2021 (проходил 11 и 12 мая)

Slide 4

Slide 4 text

4 О чём доклад? Python ускоряется? — Python Language Summit описан в блоге PSF — Текст записан кем-то, докладчиков там описывают в третьем лице, поэтому данный доклад — плохой пересказ не очень хорошего пересказа

Slide 5

Slide 5 text

В начале немного о скорости python Всё плохо? Сейчас будут очередные синтетические бенчмарки…

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

8 > python3.9 --version Python 3.9.1 > python3.9 fib.py 8555.904865264893 ms > pypy37 --version Python 3.7.9 (7e6e2bb30ac5fbdbd443619cae28c51d5c162a02, Jan 15 2021, 06:03:20) [PyPy 7.3.3-beta0 with GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] > pypy37 fib.py 715.0719165802002 ms > node --version v14.15.4 > node fib.js 247.19056797027588 ms

Slide 9

Slide 9 text

9 Test items result The difference from the previous item golang:latest( Run... After compilation ) 16.3s -- nodejs:latest 1m15.0s x4.60 pypy:3.7(run2.py) 1m23.1s x1.11 pypy:3.7(run.py) 1m27.9s x1.06 php:8.0.0RC5-cli( Turn on JIT) 2m22.2s x1.62 php:8.0.0RC5-cli( Not JIT,Opcache) 5m50.4s x2.46 php:7.4.12-cli( Not JIT) 5m46.5s x0.99 CPython 3.9(run2.py) 24m57s x4.32

Slide 10

Slide 10 text

10 benchmarksgame-team.pages.debian.net

Slide 11

Slide 11 text

11

Slide 12

Slide 12 text

12 Впрочем Python ускоряется? — Реальная нагрузка — совсем другое дело — Каждый день языки, фреймворки и пакеты дорабатываются — I/O bound, ну вы знаете…

Slide 13

Slide 13 text

А теперь к делу Некоторые вещи из Python Language Summit 2021 и не только

Slide 14

Slide 14 text

14 Новости по ускорению CPython Python ускоряется? Progress on running multiple Python interpreters in parallel in the same process, Victor Stinner & Dong-hee Na CPython improvements at Instagram, Dino Viehland Making CPython faster, Guido van Rossum

Slide 15

Slide 15 text

15 Новости по ускорению CPython (2) Python ускоряется? Tiers of Execution: Making CPython Execute Efficiently Mark Shannon HPy — Present and Future Antonio Cuni

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17 Progress on running multiple Python interpreters in parallel in the same process Python ускоряется? Для начала познакомимся с одной инициативой: — https://www.python.org/dev/peps/pep-0554/ (PEP 554 -- Multiple Interpreters in the Stdlib) с 3.10

Slide 18

Slide 18 text

18 Progress on running multiple Python interpreters in parallel in the same process Python ускоряется? Для начала познакомимся с одной инициативой: — https://www.python.org/dev/peps/pep-0554/ (PEP 554 -- Multiple Interpreters in the Stdlib) с 3.10 — Успех!

Slide 19

Slide 19 text

19 Progress on running multiple Python interpreters in parallel in the same process Python ускоряется? Для начала познакомимся с одной инициативой: — https://www.python.org/dev/peps/pep-0554/ (PEP 554 -- Multiple Interpreters in the Stdlib) с 3.10 — Успех! — Или нет: они все ещё шарят GIL… *sad trombone*

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

21 Интересно, но не просто Python ускоряется? «Threading is limited by the GIL and async isn't the right solution for every problem (nor for every person). Multiprocessing is likewise valuable in some but not all situations» ???

Slide 22

Slide 22 text

22 Почему бы нет? Python ускоряется? «Certainly they overlap in some areas, but the benefits of subinterpreters include isolation and (potentially) performance. In particular, subinterpreters provide a direct route to an alternate concurrency model (e.g. CSP) which has found success elsewhere (← они это о GO!) and will appeal to some Python users»

Slide 23

Slide 23 text

23 Communicating sequential processes Python ускоряется? — Ещё одна модель конкуретного выполнения — Ближайший аналог: GO с его каналами (простите за явное упрощение, я все равно не смог бы иначе описать)

Slide 24

Slide 24 text

24 Может быть для этого Python ускоряется? A common misconception is that this PEP also includes a promise that subinterpreters will no longer share the GIL. When that is clarified, the next question is "what is the point?". This is already answered at length in this PEP. Just to be clear, the value lies in: — increase exposure of the existing feature, which helps improve the code health of the entire CPython runtime — expose the (mostly) isolated execution of subinterpreters — preparation for per-interpreter GIL — encourage experimentation

Slide 25

Slide 25 text

25 Progress on running multiple Python interpreters in parallel in the same process Python ускоряется? И наконец: — Ребята из доклада работают на тем, чтобы сделать запуск сабинтерпретаторов, в каждом из которых свой GIL! — Увы, работа пока далека от завершения, но по результатам их экспериментов скорость не уступает multiprocessing

Slide 26

Slide 26 text

26

Slide 27

Slide 27 text

27 Кстати, про IPC и pickle больших объектов Python ускоряется? https://www.python.org/dev/peps/pep-0574 PEP 574 -- Pickle protocol 5 with out-of-band data с 3.8

Slide 28

Slide 28 text

28 HPy — Present and Future Python ускоряется? — Альтернатива https://www.python.org/dev/peps/pep-0384/ — Новый способ писать экстеншены (In other words, you use #include instead of #include ) — Большое ускорение на pypy и graalvm — Перспективы ускорения на Cpython

Slide 29

Slide 29 text

29 CPython improvements at Instagram Python ускоряется? — Поборолись с тем, что async def функции возвращают результат через StopIteration. Результат: 5% ускорения (на простых кейсах до 60%), парочка bpo’шек в 3.10 — Eager evaluation. Если на await мы можем получить результат сразу без блокирования, то можно не создавать таск. Повлияло и на asyncio.gather. Результат: 3% ускорения, пока в python не приняли

Slide 30

Slide 30 text

30 CPython improvements at Instagram (2) Python ускоряется? — Inline caching for bytecode — «теневой байткод». Инстаграм делает полную копию кешей и батйкода для «горячих» (видимо, часто используемых) функций и после запуска подменяет опкоды на более конкретные (зависит от рантайма). Результат: 5% ускорения, в cpython не примут, т.к. в 3.10 будет реализован свой механизм inline caching

Slide 31

Slide 31 text

31

Slide 32

Slide 32 text

32 CPython improvements at Instagram (3) Python ускоряется? — dictionary watchers. Долго вчитывался в описание доклада, из текста максимально ничего непонятно, но от этой оптимизации есть толк (ха). Результат: 5% ускорения, при использовании с теневым байткодом

Slide 33

Slide 33 text

33 CPython improvements experiments at Instagram Python ускоряется? — сделали JIT и покрыли почти все опкоды. «Ну запустили и запустили» (с). Результат не ясен, но очень интересно — «static python». Идея похожая на mypyc или cython, но в рантайме. «import __static__» и погнали… Звучит очень интересно, но использовать пока нельзя

Slide 34

Slide 34 text

34 Итого Python ускоряется? — выложили репозиторий и назвали эту реализацию Cinder — ускорили Cpython на реальных сценариях на 20-30% (это не в синтетике в х10 выбивать — тут реальная жизнь (тм), представьте себе в масштабах инстаграма — выключили пару тысяч лишних серверов) — хорошая новость: это нельзя использовать и это неподдерживаемый форк. WHA~?

Slide 35

Slide 35 text

35 Итого Python ускоряется? — выложили репозиторий и назвали эту реализацию Cinder — ускорили Cpython на реальных сценариях на 20-30% (это не в синтетике в х10 выбивать — тут реальная жизнь (тм), представьте себе в масштабах инстаграма — выключили пару тысяч лишних серверов) — хорошая новость: это нельзя использовать и это неподдерживаемый форк. WHA~? Хорошая потому, что это все хотят вынести в CPython или вынести на уровень обсуждения. Успех!

Slide 36

Slide 36 text

36 Tiers of Execution: Making CPython Execute Efficiently Python ускоряется? — Mark Shannon предложил для более эффективного выполнения разбить куски программ на разные сегменты с разными оптимизациями — Уровней 5: от tier -1 до tier 3 — Предполагается что 2 и 3 tier это jit — Tier 1 планируется в PEP 659 https://www.python.org/dev/peps/pep- 0659/ начиная с python 3.10

Slide 37

Slide 37 text

Там было написано «Гвидо»?

Slide 38

Slide 38 text

38

Slide 39

Slide 39 text

39

Slide 40

Slide 40 text

40 Making CPython faster Python ускоряется?

Slide 41

Slide 41 text

41 Возвращение к началу (таймлайн базируется на PEP 602) Гвидо решает, что засиделся в отставке и обращается к Microsoft. Те выделяют бюджет на то, что он хочет. Гвидо собирается вернуться к «корням» ~ где-то далее в 2020 ~ где-то в 2020 Вместе к с Mark Shannon и Eric Snow, которые тоже работают на Microsoft они выдвигают план по ускорению сpython в 5 раз(!) 1 2 Python ускоряется!1111

Slide 42

Slide 42 text

42 https://github.com/markshannon/faster- cpython/blob/master/plan.md создается репозиторий, где можно почитать как будут достигать такой драматической разницы. Про tiers of execution вы уже слышали ранее. Каждая стадия планирует ускорение python на 50% 10 октября 2021 октябрь 2020 Релиз python 3.10 Внедряется PEP 659 и мы получаем tier 1 production ready уровня 3 4 Python ускоряется!1111

Slide 43

Slide 43 text

43 Релиз python 3.11 Множество оптимизаций (здесь мы увидим хорошее ускорение языка, скорее всего). Например, zero overhead exception handling 10 октября 2023 (?) 10 октября 2022 Релиз python 3.12 CPython получит JIT!!! 5 6 Python ускоряется!1111

Slide 44

Slide 44 text

44 Релиз python 3.13 JIT на максималках 10 октября 2025 10 октября 2024 (?) Python покоряет остатки мира Танос щёлкает камнями 7 8 Python ускоряется!1111

Slide 45

Slide 45 text

45

Slide 46

Slide 46 text

46 Немного других интересных штук Python ускоряется? — PEP 654 -- Exception Groups and except*. Самое классное — можно теперь будет «матчить» целые группы эксепшенов аля except *SpamError — Core developer’ы использовали в стандартной библиотеке property based тесты на основе hypothesis — Мейнтейнер pytest пушит более вербозные ассерты (отличная идея)

Slide 47

Slide 47 text

47 Немного других интересных штук (2) Python ускоряется? — PEP 657 -- Include Fine Grained Error Locations in Tracebacks. Самое классное —со «стрелочками» можно увидеть где ошибка

Slide 48

Slide 48 text

48 Немного других интересных штук (3) Python ускоряется? — В stdlib всё не очень. Из 208 модулей многие не используются. Некоторые совсем, большинство PR (50) — в asyncio и те составляют 3 процента от общего количества PR

Slide 49

Slide 49 text

49 Приходите работать в банк! — у нас свежий python 3.9.5* — fastapi как framework of choice — оперативные собесы без многочасовых решений литкода — работаем по разумному балансу scrum — поддерживаем гибридные режимы работы — внутри строят инфраструктуру для разработчиков — мы все входим в Python community — вокруг много умных, открытых людей и классных профессионалов — мы стараемся поддерживать друг друга и поддерживать инициативу — онбордим людей, не бросаем на произвол судьбы — помогаем развиваться — не «самые умные мы развиваем вас», а мы развиваемся все вместе, не стесняемся делиться — стараемся следовать принципам MSA — docker — Kubernetes — вы научитесь писать raiffeisenbank Python ускоряется?

Slide 50

Slide 50 text

50 Куда слать резюме? Python ускоряется? Ссылки: — https://dgtl.raiffeisen.ru/vacancy — https://hh.ru/employer/4023 + Если хотите, можете написать мне (контакты на сайте), я соориентирую.

Slide 51

Slide 51 text

Спасибо за внимание! Аникин Денис https://xfenix.ru/