Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python ускоряется?

Denis Anikin
July 14, 2021
26

Python ускоряется?

В 2021 году поговорили о свежайшей новости: о том как ускоряется python, о куче интересных новостей с прорывного language summit

Denis Anikin

July 14, 2021
Tweet

Transcript

  1. 2 Кто я? Python ускоряется? — Меня зовут Аникин Денис

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

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

    описан в блоге PSF — Текст записан кем-то, докладчиков там описывают в третьем лице, поэтому данный доклад — плохой пересказ не очень хорошего пересказа
  4. В начале немного о скорости python Всё плохо? Сейчас будут

    очередные синтетические бенчмарки…
  5. 6

  6. 7

  7. 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
  8. 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
  9. 11

  10. 12 Впрочем Python ускоряется? — Реальная нагрузка — совсем другое

    дело — Каждый день языки, фреймворки и пакеты дорабатываются — I/O bound, ну вы знаете…
  11. 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
  12. 15 Новости по ускорению CPython (2) Python ускоряется? Tiers of

    Execution: Making CPython Execute Efficiently Mark Shannon HPy — Present and Future Antonio Cuni
  13. 16

  14. 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
  15. 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 — Успех!
  16. 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*
  17. 20

  18. 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» ???
  19. 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»
  20. 23 Communicating sequential processes Python ускоряется? — Ещё одна модель

    конкуретного выполнения — Ближайший аналог: GO с его каналами (простите за явное упрощение, я все равно не смог бы иначе описать)
  21. 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
  22. 25 Progress on running multiple Python interpreters in parallel in

    the same process Python ускоряется? И наконец: — Ребята из доклада работают на тем, чтобы сделать запуск сабинтерпретаторов, в каждом из которых свой GIL! — Увы, работа пока далека от завершения, но по результатам их экспериментов скорость не уступает multiprocessing
  23. 26

  24. 27 Кстати, про IPC и pickle больших объектов Python ускоряется?

    https://www.python.org/dev/peps/pep-0574 PEP 574 -- Pickle protocol 5 with out-of-band data с 3.8
  25. 28 HPy — Present and Future Python ускоряется? — Альтернатива

    https://www.python.org/dev/peps/pep-0384/ — Новый способ писать экстеншены (In other words, you use #include <hpy.h> instead of #include <Python.h>) — Большое ускорение на pypy и graalvm — Перспективы ускорения на Cpython
  26. 29 CPython improvements at Instagram Python ускоряется? — Поборолись с

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

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

  29. 32 CPython improvements at Instagram (3) Python ускоряется? — dictionary

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

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

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

    реализацию Cinder — ускорили Cpython на реальных сценариях на 20-30% (это не в синтетике в х10 выбивать — тут реальная жизнь (тм), представьте себе в масштабах инстаграма — выключили пару тысяч лишних серверов) — хорошая новость: это нельзя использовать и это неподдерживаемый форк. WHA~? Хорошая потому, что это все хотят вынести в CPython или вынести на уровень обсуждения. Успех!
  33. 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
  34. 38

  35. 39

  36. 41 Возвращение к началу (таймлайн базируется на PEP 602) Гвидо

    решает, что засиделся в отставке и обращается к Microsoft. Те выделяют бюджет на то, что он хочет. Гвидо собирается вернуться к «корням» ~ где-то далее в 2020 ~ где-то в 2020 Вместе к с Mark Shannon и Eric Snow, которые тоже работают на Microsoft они выдвигают план по ускорению сpython в 5 раз(!) 1 2 Python ускоряется!1111
  37. 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
  38. 43 Релиз python 3.11 Множество оптимизаций (здесь мы увидим хорошее

    ускорение языка, скорее всего). Например, zero overhead exception handling 10 октября 2023 (?) 10 октября 2022 Релиз python 3.12 CPython получит JIT!!! 5 6 Python ускоряется!1111
  39. 44 Релиз python 3.13 JIT на максималках 10 октября 2025

    10 октября 2024 (?) Python покоряет остатки мира Танос щёлкает камнями 7 8 Python ускоряется!1111
  40. 45

  41. 46 Немного других интересных штук Python ускоряется? — PEP 654

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

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

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

    3.9.5* — fastapi как framework of choice — оперативные собесы без многочасовых решений литкода — работаем по разумному балансу scrum — поддерживаем гибридные режимы работы — внутри строят инфраструктуру для разработчиков — мы все входим в Python community — вокруг много умных, открытых людей и классных профессионалов — мы стараемся поддерживать друг друга и поддерживать инициативу — онбордим людей, не бросаем на произвол судьбы — помогаем развиваться — не «самые умные мы развиваем вас», а мы развиваемся все вместе, не стесняемся делиться — стараемся следовать принципам MSA — docker — Kubernetes — вы научитесь писать raiffeisenbank Python ускоряется?
  45. 50 Куда слать резюме? Python ускоряется? Ссылки: — https://dgtl.raiffeisen.ru/vacancy —

    https://hh.ru/employer/4023 + Если хотите, можете написать мне (контакты на сайте), я соориентирую.