$30 off During Our Annual Pro Sale. View Details »

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

Denis Anikin
July 14, 2021
4

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

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

Denis Anikin

July 14, 2021
Tweet

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. 6

    View Slide

  7. 7

    View Slide

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

    View Slide

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

    View Slide

  10. 10
    benchmarksgame-team.pages.debian.net

    View Slide

  11. 11

    View Slide

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

    View Slide

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

    View Slide

  14. 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

    View Slide

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

    View Slide

  16. 16

    View Slide

  17. 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

    View Slide

  18. 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
    — Успех!

    View Slide

  19. 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*

    View Slide

  20. 20

    View Slide

  21. 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»
    ???

    View Slide

  22. 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»

    View Slide

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

    View Slide

  24. 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

    View Slide

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

    View Slide

  26. 26

    View Slide

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

    View Slide

  28. 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

    View Slide

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

    View Slide

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

    View Slide

  31. 31

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. 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

    View Slide

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

    View Slide

  38. 38

    View Slide

  39. 39

    View Slide

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

    View Slide

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

    View Slide

  42. 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

    View Slide

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

    View Slide

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

    View Slide

  45. 45

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide