CPython notes
Идея нового алгоритма сборщика мусора (скорее всего, будет реализована): https://github.com/faster-cpython/ideas/issues/613 В итоге +3-4% по перфомансу
https://discuss.python.org/t/incremental-gc-and-pushing-back-the-3-13-0-release/65285
В итоге этот новый сборщик мусора ревертят, из-за ухудшения по производительности в определенных сценариях... sphinx build стал тратить в 3 раза больше времени с этим сборщиком мусора
В итоге этот новый сборщик мусора ревертят, из-за ухудшения по производительности в определенных сценариях... sphinx build стал тратить в 3 раза больше времени с этим сборщиком мусора
Discussions on Python.org
Incremental GC and pushing back the 3.13.0 release
I’m a little [1] concerned with the impact of the incremental GC change in 3.13, which recently showed up (Incremental GC means that Sphinx is significantly slower in 3.13 than in 3.12 · Issue #124567 · python/cpython · GitHub). It’s not clear that the incremental…
Релизнулся питон 3.13!
Скачать можно тут: https://www.python.org/downloads/release/python-3130/
Что нового: https://docs.python.org/3.13/whatsnew/3.13.html
Скачать можно тут: https://www.python.org/downloads/release/python-3130/
Что нового: https://docs.python.org/3.13/whatsnew/3.13.html
Вместе с этим, 3.8 более не поддерживается:
https://discuss.python.org/t/python-3-8-is-now-officially-eol/66983
https://discuss.python.org/t/python-3-8-is-now-officially-eol/66983
Discussions on Python.org
Python 3.8 is now officially EOL
PEP 569 updated and marked as final. The Downloads page and the devguide updated. The branch is deleted, and a new 3.8 tag is placed in its stead for posterity. Thanks, 3.8. You were a good one. You brought us assignment expressions, and with that, the Steering…
Так же как и когда-то был опубликован PEP для JIT (уже после того как его смержили 😅), теперь опубликован PEP для нового REPL: https://peps.python.org/pep-0762/
Python Enhancement Proposals (PEPs)
PEP 762 – REPL-acing the default REPL | peps.python.org
One of Python’s core strengths is its interactive mode, also known as the Read-Eval-Print Loop (REPL), or the Python console, or the Python shell. This PEP describes the new implementation of this functionality written in Python. The new REPL released i...
Предложение об отказе от daemon-тредов:
https://discuss.python.org/t/getting-rid-of-daemon-threads/68836
https://discuss.python.org/t/getting-rid-of-daemon-threads/68836
Discussions on Python.org
Getting Rid of Daemon Threads
Daemon threads are a regular source of pain in core development and have been for years. I’d like to get rid of them. The impact on the Python community is the deciding factor; I suspect low impact but may be wrong. Your feedback will help. Proposal …
CPython notes
https://discuss.python.org/t/calling-for-a-vote-of-no-confidence/61557/1 TL;DR: один из core developer'ов призывает к роспуску состава текущего руководящего совета. Все это связано с временной отставкой Tim Peters (пост выше)
Uncle Timmy’s Public Blog
Mea Culpa
Question everything. Love everyone.
Был смержен тред-локал байткод - https://github.com/python/cpython/pull/123926
Зачем это нужно и как это связано с nogil aka free-threaded?
Напомню, что в версии 3.11 был добавлен так называемый <адаптивный> интерпретатор, который умеет в специализацию.
Типичная операция
Адаптивный интерпретатор "подстраивается" под ситуации когда у вас достаточно много случаев в коде когда в операции
Так вот, в случае с nogil сборкой адаптивный интерпретатор не является потокобезопасным, что делало nogil сборку действительно медленнее(потому что специализация была выключена в nogil сборке). Pull request отмеченный выше делает адаптивный интерпретатор потокобезопасным и вместе с этим у
Зачем это нужно и как это связано с nogil aka free-threaded?
Напомню, что в версии 3.11 был добавлен так называемый <адаптивный> интерпретатор, который умеет в специализацию.
Типичная операция
x + y
в обычном случае превращается в BINARY_OP
опкод, который делает x.__add__(y)
, что несомненно не очень-то и дешево, так как надо производить лукап __add__
и прочие связанные с этим операции.Адаптивный интерпретатор "подстраивается" под ситуации когда у вас достаточно много случаев в коде когда в операции
x + y
оба операнда являются интами, и тогда можно сэкономить на лукапе и дергать специализированную сишную функцию для сложения интов, которая не производит никакого лукапа атрибутов, и именно на этом мы выигрываем по производительности.Так вот, в случае с nogil сборкой адаптивный интерпретатор не является потокобезопасным, что делало nogil сборку действительно медленнее(потому что специализация была выключена в nogil сборке). Pull request отмеченный выше делает адаптивный интерпретатор потокобезопасным и вместе с этим у
codeobject
появляется атрибут co_tlbc
:)https://discuss.python.org/t/an-analysis-of-return-in-finally-in-the-wild/70633
Дискуссия о использования
Дискуссия о использования
return
в finally
блоке. Вероятно, PEP 601 который предлагает запретить return/break/continue
в finally
блоке будет вновь рассмотрен.Discussions on Python.org
An analysis of return-in-finally in the wild
During the discussion on PEP 760 (no more bare excepts) we got to the issue of return/break/continue in finally blocks, in particular the fact that they swallow an in-flight exception. This is flagged by linters, but so far the decision has not been taken…
PhD thesis о конструировании высокопроизводительных виртуальных машин для динамических языков.
Я с некоторой долей вероятности уверен что текущие оптимизации в CPython в какой-то мере основаны на этой работе. Ее автор кстати участник faster-cpython команды :)
https://theses.gla.ac.uk/2975/1/2011shannonphd.pdf
За ссылку спасибо @mikhail_efimov!
Я с некоторой долей вероятности уверен что текущие оптимизации в CPython в какой-то мере основаны на этой работе. Ее автор кстати участник faster-cpython команды :)
https://theses.gla.ac.uk/2975/1/2011shannonphd.pdf
За ссылку спасибо @mikhail_efimov!
https://github.com/python/cpython/issues/127949
Более никаких asyncio policy.
Более никаких asyncio policy.
GitHub
Deprecate asyncio policy system · Issue #127949 · python/cpython
asyncio's policy system deprecation asyncio's policy system1 has been a source of confusion and problems in asyncio for a very long time. The policies no longer serve a real purpose. Loops ...
https://github.com/faster-cpython/ideas/issues/642#issuecomment-2571712347
😁
Тир 1 интерпретатор с tail calls быстрее чем джит :)
😁
Тир 1 интерпретатор с tail calls быстрее чем джит :)
GitHub
Tail-calling interpreter · Issue #642 · faster-cpython/ideas
An alternative dispatch mechanism to switch or computed gotos is to use tail calls. In a tail calling interpreter, dispatch is implemented as a tail call to the next instruction. For example: the C...
Forwarded from Находки в опенсорсе
В asyncio добавили возможность смотреть граф вызова корутин
Ждем в python3.14: https://github.com/python/cpython/commit/188598851d5cf475fa57b4ec21c0e88ce9316ff0
Пример:
Выведет:
Как оно работает?
Появилось два новых важных изменений:
- Поле
- Новое свойство у
Нужно, чтобы отрисовывать
Конечно же есть две иплементации. На питоне уже показал, вот так оно на C:
Как использовать?
Конечно же данная фича умеет не только печатать объекты в stdout. Прежде всего – она предоставляет удобное АПИ для различных IDE и дебагеров, которые смогут использовать данную информацию для визуализации: чего вообще у вас там происходит.
Ну и мониторинги, и sentry, и много кто еще получит дополнительную мета-информацию о процессе выполнения кода.
Документация: https://docs.python.org/3.14/library/asyncio-graph.html
Круто?
| Поддержать | YouTube | GitHub | Чат |
Ждем в python3.14: https://github.com/python/cpython/commit/188598851d5cf475fa57b4ec21c0e88ce9316ff0
Пример:
import asyncio
async def test():
asyncio.print_call_graph()
async def main():
async with asyncio.TaskGroup() as g:
g.create_task(test(), name=test.__name__)
asyncio.run(main())
Выведет:
* Task(name='test', id=0x10304eee0)
+ Call stack:
| File '/Users/sobolev/Desktop/cpython2/Lib/asyncio/graph.py', line 278, in print_call_graph()
| File '/Users/sobolev/Desktop/cpython2/ex.py', line 4, in async test()
+ Awaited by:
* Task(name='Task-1', id=0x1034a1e60)
+ Call stack:
| File '/Users/sobolev/Desktop/cpython2/Lib/asyncio/taskgroups.py', line 121, in async TaskGroup._aexit()
| File '/Users/sobolev/Desktop/cpython2/Lib/asyncio/taskgroups.py', line 72, in async TaskGroup.__aexit__()
| File '/Users/sobolev/Desktop/cpython2/ex.py', line 7, in async main()
Как оно работает?
Появилось два новых важных изменений:
- Поле
Frame.f_generator
– оно хранит генератор или корутину, которая владеет данным фреймом. Нужно чтобы отрисовывать + Call stack:
- Новое свойство у
Future
@property
def _asyncio_awaited_by(self):
if self.__asyncio_awaited_by is None:
return None
return frozenset(self.__asyncio_awaited_by)
Нужно, чтобы отрисовывать
+ Awaited by:
.Конечно же есть две иплементации. На питоне уже показал, вот так оно на C:
/*[clinic input]
@critical_section
@getter
_asyncio.Future._asyncio_awaited_by
[clinic start generated code]*/
static PyObject *
_asyncio_Future__asyncio_awaited_by_get_impl(FutureObj *self)
/*[clinic end generated code: output=... input=...]*/
{
/* Implementation of a Python getter. */
if (self->fut_awaited_by == NULL) {
Py_RETURN_NONE;
}
if (self->fut_awaited_by_is_set) {
/* Already a set, just wrap it into a frozen set and return. */
assert(PySet_CheckExact(self->fut_awaited_by));
return PyFrozenSet_New(self->fut_awaited_by);
}
PyObject *set = PyFrozenSet_New(NULL);
if (set == NULL) {
return NULL;
}
if (PySet_Add(set, self->fut_awaited_by)) {
Py_DECREF(set);
return NULL;
}
return set;
}
Как использовать?
Конечно же данная фича умеет не только печатать объекты в stdout. Прежде всего – она предоставляет удобное АПИ для различных IDE и дебагеров, которые смогут использовать данную информацию для визуализации: чего вообще у вас там происходит.
Ну и мониторинги, и sentry, и много кто еще получит дополнительную мета-информацию о процессе выполнения кода.
Документация: https://docs.python.org/3.14/library/asyncio-graph.html
Круто?
| Поддержать | YouTube | GitHub | Чат |
GitHub
GH-91048: Add utils for capturing async call stack for asyncio progra… · python/cpython@1885988
…ms and enable profiling (#124640)
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Kumar Aditya...
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Kumar Aditya...
https://discuss.python.org/t/updating-pep-387-to-prefer-5-year-deprecations-instead-of-2-years/65166/35
Теперь для того чтобы удалить что-то, что deprecated - нужно ждать 5 лет.
Как мне кажется, худшее решение за последние годы
Теперь для того чтобы удалить что-то, что deprecated - нужно ждать 5 лет.
Как мне кажется, худшее решение за последние годы
Discussions on Python.org
Updating PEP 387 to prefer 5 year deprecations instead of 2 years
Perhaps there shouldn’t be constant breaking changes? Also unpaid contributors move on with their life. If something is fun (like a new feature) they might feel like doing it, but if it feels like work (setting up github runners to publish on pypi and risk…