Предложение выпилить GIL продолжают активно обсуждать.
На ежегодный Python core development sprint пригласили Sam Gross (автор
Изменение крупное, но если его добавлять небольшими кусками и растянуть этот процесс на несколько лет, то получится избежать Python 4. А Python 4 никто не хочет.
Сэма пригласили присоединиться к числу core-разработчиков интерпретатора. Łukasz Langa будет его менторить.
Пока что всё выглядит очень оптимистично. Ждите Python 3.20 без GIL 😅
https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0/
#gil
На ежегодный Python core development sprint пригласили Sam Gross (автор
nogil
), и задавали ему много разных вопросов. Все под впечатлением. Всерьёз обсуждается вливание этого экспериментального форка в основной код CPython, но спешить с этим точно не будут, потому что изменения такого масштаба в интерпретаторе потребуют адаптации многих библиотек и пользовательского кода.Изменение крупное, но если его добавлять небольшими кусками и растянуть этот процесс на несколько лет, то получится избежать Python 4. А Python 4 никто не хочет.
Сэма пригласили присоединиться к числу core-разработчиков интерпретатора. Łukasz Langa будет его менторить.
Пока что всё выглядит очень оптимистично. Ждите Python 3.20 без GIL 😅
https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0/
#gil
lukasz.langa.pl
Notes From the Meeting On Python GIL Removal Between Python Core and Sam Gross - Łukasz Langa
During the annual Python core development sprint we held a meeting with Sam Gross, the author of nogil, a fork of Python 3.9 that removes the GIL. This is a non-linear summary of the meeting.
Пару дней назад опубликовали черновик PEP 671.
Предлагается добавить синтаксис для значений по умолчанию, вычисляемых прямо перед выполнением функции (late-bound function argument defaults). Грубо говоря, можно будет в качестве дефолтного значения указать лямбда-функцию из одного выражения, в которой будут доступны все предыдущие аргументы. Это позволит более компактно выражать зависимости между аргументами.
Например, вместо вот такого:
Можно указывать несколько аргументов с такими динамическими дефолтными значениями. Они будут выполнены в порядке определения слева направо. Каждый аргумент может ссылаться на любые предыдущие аргументы, но не на следующие после него.
Это пока что всего-лишь черновик на ранней стадии, и далеко не факт, что это изменение будет принято в язык.
#pep
Предлагается добавить синтаксис для значений по умолчанию, вычисляемых прямо перед выполнением функции (late-bound function argument defaults). Грубо говоря, можно будет в качестве дефолтного значения указать лямбда-функцию из одного выражения, в которой будут доступны все предыдущие аргументы. Это позволит более компактно выражать зависимости между аргументами.
Например, вместо вот такого:
# Very common: Use None and replace it in the functionМожно будет написать вот такое:
def bisect_right(a, x, lo=0, hi=None, *, key=None):
if hi is None:
hi = len(a)
...
def bisect_right(a, x, lo=0, hi=>len(a), *, key=None):Если при вызове аргумент
...
hi
передан, то дефолтное значение не нужно, ничего не происходит. Если же аргумент не передан, то дефолтное значение будет вычислено прямо перед выполнением функции на основе другого аргумента. Вычисление дефолтного значения происходит в пространстве имён функции, поэтому другие аргументы уже должны быть определены и доступны для использования.Можно указывать несколько аргументов с такими динамическими дефолтными значениями. Они будут выполнены в порядке определения слева направо. Каждый аргумент может ссылаться на любые предыдущие аргументы, но не на следующие после него.
Это пока что всего-лишь черновик на ранней стадии, и далеко не факт, что это изменение будет принято в язык.
#pep
peps.python.org
PEP 671 – Syntax for late-bound function argument defaults | peps.python.org
Python Enhancement Proposals (PEPs)
Что скажете про PEP 671?
Anonymous Poll
37%
всегда не хватало такой фичи 👍
23%
мне и без этого было нормально, не буду пользоваться 😐
40%
страшно, вырубай! язык становится слишком сложным 😱
Воскрешу из сохранённых сообщений конспект доклада с Python Community Meetup, который я посмотрел аж ещё в августе.
Владислав Лаухин — Применение Dependency Injection в Python
https://youtu.be/qfMWyStoyS4?t=3300
* Dependency Injection — полезный подход, но в Python-сообществе эта тема недооценена, потому что у нас (наверное, по историческим причинам) устоялись другие практики. Например, Django и Flask — самые популярные веб-фреймворки, не используют этот подход вообще, он не упоминается в документации, поэтому многие питонисты про такое могут даже не знать. Вместо этого у нас в ходу глобальные переменные, которые импортируются из всяких неожиданных мест.
* В терминах и аббревиатурах тоже есть путаница и непонимание: Dependency Inversion, Inversion of Control и Dependency Injection — это разные вещи.
* Dependency Injection (дальше просто DI) уменьшает связанность кода в системе, делает его гибче, расширяемее, его становится легче изменять и покрывать тестами.
* DI не стоит использовать везде. Например, это не нужно в исследовательских проектах (RnD), прототипах и небольших скриптах. Легаси-код переписывать на DI тоже не всегда обоснованно, усилия могут не окупиться.
* Встроенная система зависимостей в FastAPI отлично реализует принцип DI и решает проблемы, пользуйтесь ей. Однако, если вы пишете не HTTP API, вам придётся искать другой способ внедрять зависимости.
* Докладчик с командой попробовали несколько реализаций DI на Python, но остановились на dependency_injector, и им очень нравится. Внедрили уже в половину своих проектов. Не всё идеально, но плюсы перевешивают минусы.
* Тесты стали значительно проще. Уменьшилось количество манкипатч/моков, благодаря чему тесты перестали ломаться сотнями штук от каждого рефакторинга.
* Выводы: DI — круто,
#конспект #dependency_injection
Владислав Лаухин — Применение Dependency Injection в Python
https://youtu.be/qfMWyStoyS4?t=3300
* Dependency Injection — полезный подход, но в Python-сообществе эта тема недооценена, потому что у нас (наверное, по историческим причинам) устоялись другие практики. Например, Django и Flask — самые популярные веб-фреймворки, не используют этот подход вообще, он не упоминается в документации, поэтому многие питонисты про такое могут даже не знать. Вместо этого у нас в ходу глобальные переменные, которые импортируются из всяких неожиданных мест.
* В терминах и аббревиатурах тоже есть путаница и непонимание: Dependency Inversion, Inversion of Control и Dependency Injection — это разные вещи.
* Dependency Injection (дальше просто DI) уменьшает связанность кода в системе, делает его гибче, расширяемее, его становится легче изменять и покрывать тестами.
* DI не стоит использовать везде. Например, это не нужно в исследовательских проектах (RnD), прототипах и небольших скриптах. Легаси-код переписывать на DI тоже не всегда обоснованно, усилия могут не окупиться.
* Встроенная система зависимостей в FastAPI отлично реализует принцип DI и решает проблемы, пользуйтесь ей. Однако, если вы пишете не HTTP API, вам придётся искать другой способ внедрять зависимости.
* Докладчик с командой попробовали несколько реализаций DI на Python, но остановились на dependency_injector, и им очень нравится. Внедрили уже в половину своих проектов. Не всё идеально, но плюсы перевешивают минусы.
* Тесты стали значительно проще. Уменьшилось количество манкипатч/моков, благодаря чему тесты перестали ломаться сотнями штук от каждого рефакторинга.
* Выводы: DI — круто,
dependency_injector
— огонь, тестировать код — важно.#конспект #dependency_injection
Доклад про инъекцию зависимостей в питоне от создателя
https://www.youtube.com/watch?v=mJI7MzRCVkQ
#dependency_injection
dependency_injector
.https://www.youtube.com/watch?v=mJI7MzRCVkQ
#dependency_injection
YouTube
Dependency injection в Python простыми словами / Dependency Injector
#python #dependencyinjection #interview
В этом видео простыми словами рассказываю о dependency injection в Python и на практике показываю как работает этот принцип.
Dependency Injector - https://github.com/ets-labs/python-dependency-injector
В этом видео простыми словами рассказываю о dependency injection в Python и на практике показываю как работает этот принцип.
Dependency Injector - https://github.com/ets-labs/python-dependency-injector
Классическая статья про DI от Мартина Фаулера.
https://martinfowler.com/articles/injection.html
#dependency_injection
https://martinfowler.com/articles/injection.html
#dependency_injection
martinfowler.com
Inversion of Control Containers and the Dependency Injection
pattern
pattern
Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.
Выполняем:
Теперь можно программно запускать и удалять сервера БД. Полезно, например, для тестов, когда тесты сами могут создать себе такую базу, которая им нужна, сделать своё дело и замести все следы. В комплекте даже есть фикстура для
Сборки пока что публикуются только для Linux, следовательно, на других ОС это работать не будет.
https://github.com/michelp/postgresql-wheel
$ pip install postgresql-wheelИ теперь у нас в виртуальном окружении есть полноценный PostgreSQL! Изолированный, уже скомпилированный. Для установки не потребовалось
sudo
.Теперь можно программно запускать и удалять сервера БД. Полезно, например, для тестов, когда тесты сами могут создать себе такую базу, которая им нужна, сделать своё дело и замести все следы. В комплекте даже есть фикстура для
pytest
.Сборки пока что публикуются только для Linux, следовательно, на других ОС это работать не будет.
https://github.com/michelp/postgresql-wheel
GitHub
GitHub - michelp/postgresql-wheel: A Python wheel containing PostgreSQL
A Python wheel containing PostgreSQL. Contribute to michelp/postgresql-wheel development by creating an account on GitHub.
Обсуждения выпиливания GIL продолжаются.
Недавно Гвидо создал тред по поводу библиотек с нативным кодом, которые никак не защищают свои внутренние данные от других потоков и просто полагаются на наличие GIL, который исключит возможность одновременного доступа к данным. Таких библиотек много, и они начнут ломаться разными неожиданными способами, если просто отнять у них GIL. Нужно найти такой подход, чтобы они не сломались и тем самым не создали ещё одну несовместимую версию языка (никто не хочет повторения истории с 2->3).
То, что уже обсуждаются уже конкретные детали плана, заставляет меня верить, что в основном идея удаления GIL обсуждена и принята.
https://discuss.python.org/t/nogil-mode-and-extensions/11546/11
#gil
Недавно Гвидо создал тред по поводу библиотек с нативным кодом, которые никак не защищают свои внутренние данные от других потоков и просто полагаются на наличие GIL, который исключит возможность одновременного доступа к данным. Таких библиотек много, и они начнут ломаться разными неожиданными способами, если просто отнять у них GIL. Нужно найти такой подход, чтобы они не сломались и тем самым не создали ещё одну несовместимую версию языка (никто не хочет повторения истории с 2->3).
То, что уже обсуждаются уже конкретные детали плана, заставляет меня верить, что в основном идея удаления GIL обсуждена и принята.
https://discuss.python.org/t/nogil-mode-and-extensions/11546/11
#gil
Discussions on Python.org
Nogil mode and extensions
If we were to transition to nogil mode, the biggest concern for users would be extension modules. While Python code already has to deal with preemptive scheduling, C extensions have always seen their data structures protected by the GIL, and this would go…
Автоформаттер
https://twitter.com/llanga/status/1455496802812239876?s=21
#black
black
принял «политику стабильности». В 2022 ожидайте стабильный релиз.https://twitter.com/llanga/status/1455496802812239876?s=21
#black
Twitter
Łukasz Langa
Version 21.10b0 of Black, your friendly #Python auto-formatter, is out now! 🖤 The biggest news is that thanks to @pradyunsg and @jelleszijlstra we adopted a stability policy that will go into effect starting with the first stable release in Jan 2022. 🤯 b…
В связи с чем проект Django собирается начать форматировать свой код при помощи
Этот автоформаттер постепенно становится де-факто стандартом оформления кода. Но кажется, что Django будет первым проектом такого масштаба, который решил «очернить» свой код.
https://twitter.com/adamchainz/status/1455850491519254531?s=21
#black #django
black
.Этот автоформаттер постепенно становится де-факто стандартом оформления кода. Но кажется, что Django будет первым проектом такого масштаба, который решил «очернить» свой код.
https://twitter.com/adamchainz/status/1455850491519254531?s=21
#black #django
Twitter
Adam Johnson
Very exciting. Django will be adopting Black in the new year, as DEP 8 declared we will use the first stable release. twitter.com/llanga/status/…
Forwarded from ☕️ Мерлин заваривает τσάι 🐌
«Прежде всего, дзен Python говорит, что любое решение должно быть единственное. Поэтому в Python всего минимум по три.»
There should be one-- and preferably only one --obvious way to do it.А какие ещё вы знаете примеры нарушения этого принципа? Желательно в стандартной библиотеке.
Surprisingly at the top of that curve is again 'no types'
https://twitter.com/fasterthanlime/status/1248025337235210243?s=20
#meme
https://twitter.com/fasterthanlime/status/1248025337235210243?s=20
#meme
Всячески рекомендую ютуб-канал "Диджитализируй!". Он периодически снимает классные видео про Python. А сегодня я нашёл там настолько полезное видео, что решил даже запостить его сюда, чтобы в следующий раз, когда беда вдруг снова внезапно меня настигнет, оно было под рукой.
https://www.youtube.com/watch?v=Q1RUYQIgVKM
#vim
https://www.youtube.com/watch?v=Q1RUYQIgVKM
#vim
YouTube
А есть ли вообще способ выйти из Vim? Как уничтожить Vim, если он внезапно открылся?
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Сказать спасибо за это видео можно здесь — https://boosty.to/digitalize.team…
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Сказать спасибо за это видео можно здесь — https://boosty.to/digitalize.team…
Forwarded from DevBrain
5 ноября вышла вторая альфа Python 3.11 и по мнению людей, которым можно доверять, 3.11 на ~30% быстрее чем 3.10.
В первую очередь рост производительности это работа над идеями по оптимизации в рамках Faster CPython Project. Узнать о новых фичах в 3.11 можно по ссылке.
В первую очередь рост производительности это работа над идеями по оптимизации в рамках Faster CPython Project. Узнать о новых фичах в 3.11 можно по ссылке.
Python.org
Python Release Python 3.11.0a2
The official home of the Python Programming Language
Forwarded from Python Daily
“Zero-cost” exceptions are implemented. The cost of try statements is almost eliminated when no exception is raised. (Contributed by Mark Shannon in bpo-40222.)
Наконец-то сделали поддержку "бесплатных" исключений. Под бесплатностью имеется в виду что блок
Мне кажется что только одна эта оптимизация поспособствовала значительному ускорению 3.11.
#pydaily
Наконец-то сделали поддержку "бесплатных" исключений. Под бесплатностью имеется в виду что блок
try
не будет потреблять практически никаких ресурсов, если в нём не возникнет исключение. Во многих других языках это уже давно есть.Мне кажется что только одна эта оптимизация поспособствовала значительному ускорению 3.11.
#pydaily
Полезный доклад от Андрея Власовских — лида команды PyCharm в JetBrains — про то, как быстрее и умнее редактировать код. В целом, Андрей показывает довольно базовые вещи, которые логично было бы ожидать от IDE. Проблема в том, что многие люди не знают, что их IDE всякое такое умеет, и запускают (относительно) тяжелую среду разработки, чтобы пользоваться ей просто как блокнотом с подсветкой кода. Не надо так, IDE намного умнее. Нужно лишь запомнить один самый главный хоткей —
https://youtu.be/FW3_OPBxk2s
#jetbrains #pycharm
Find Action
!https://youtu.be/FW3_OPBxk2s
#jetbrains #pycharm
YouTube
Андрей Власовских, JetBrains «7 советов по редактированию кода в PyCharm»
Выступление на PYCON RUSSIA 2018
http://pycon.ru/2018/
http://pycon.ru/2018/
Pyjion — проект по скрещиванию ванильного CPython с JIT-компилятором из .NET — получил релиз с круглым номером 1.0.
Напомню:
* по идее этот проект может запускать любой валидный код на Python, включая все библиотеки с нативными модулями (
* работает с самым обычным CPython 3.10;
* работает на Windows, Linux и macOS;
* устанавливается через
* всё, что нужно, чтобы магия начала действовать — импортировать
Пока что проект не умеет работать с контекстными менеджерами и
Кто-нибудь уже пробовал? Ускорило?
https://www.trypyjion.com/
#pyjion #jit
Напомню:
* по идее этот проект может запускать любой валидный код на Python, включая все библиотеки с нативными модулями (
numpy
, pandas
, psycopg
и так далее) без пересборок и каких-либо дополнительных действий;* работает с самым обычным CPython 3.10;
* работает на Windows, Linux и macOS;
* устанавливается через
pip
, но будет рассчитывать, что в системе есть компилятор .NET 6;* всё, что нужно, чтобы магия начала действовать — импортировать
pyjion
, вызвать pyjion.enable()
перед основным кодом программы.Пока что проект не умеет работать с контекстными менеджерами и
async/await
. Но это не значит, что он не сможет запустить такой код. Просто JIT-компиляция для функций с такими инструкциями не произойдёт, и они будут работать в обычном интерпретируемом режиме.Кто-нибудь уже пробовал? Ускорило?
https://www.trypyjion.com/
#pyjion #jit
Попытался разобраться, благодаря чему Python 3.11 уже аж на 30% быстрее 3.10. Собрал небольшой синтетический микробенчмарк с делением чисел. И действительно сразу же видно, что даже на максимально простых примерах без каких-либо исключений 3.11 быстрее примерно на треть. В официальном ченджлоге не упоминается никаких таких оптимизаций, которые могли бы дать подобный эффект. Возможно, документацию пока просто не успели обновить. Возможно, это какой-то побочный эффект от ускорений, связанных с обработкой исключений. Похоже, надо идти в список коммитов в Git и искать ответы там 🤷♂️
По поводу "zero cost" exceptions. Разница между кодом вообще без исключений и кодом с блоком
Ссылки:
* детали моего наколеночного бенчмарка;
* идея бенчмарка взята из этого ответа.
По поводу "zero cost" exceptions. Разница между кодом вообще без исключений и кодом с блоком
try..except
, который ничего не ловит, действительно небольшая. Как утверждает официальный FAQ, такие блоки всегда были дешевыми. И в 3.11 эта разница действительно стала ещё меньше — 5 наносекунд против ~2 наносекунд. Тем не менее, цена всё ещё не нулевая. Наверное, именно поэтому автор этой оптимизации ставит кавычки вокруг "zero cost". Если же исключение возникает, то обе версии работают примерно с одинаковой скоростью.Ссылки:
* детали моего наколеночного бенчмарка;
* идея бенчмарка взята из этого ответа.
Gist
Python 3.10 vs. 3.11 comparison
Python 3.10 vs. 3.11 comparison. GitHub Gist: instantly share code, notes, and snippets.