Channel: CPython notes
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…
😢8🤣5👍2🫡2🤯1
Релизнулся питон 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
🔥22😁4
Вместе с этим, 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…
👍12😭4🤷♂2
Так же как и когда-то был опубликован 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...
😁14
Предложение об отказе от 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 …
🤨4👍3
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.
❤4
Был смержен тред-локал байткод - 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
:)🔥22👍5❤2
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…
👍16🗿5🤯2😁1
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!
❤18👍2🤯2😱2
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 ...
❤11🔥6👍3
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...
👍8⚡7😁2
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 <[email protected]>
Co-authored-by: Pablo Galindo <[email protected]>
Co-authored-by: Kumar Aditya...
Signed-off-by: Pablo Galindo <[email protected]>
Co-authored-by: Pablo Galindo <[email protected]>
Co-authored-by: Kumar Aditya...
🔥37👍5😱3
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…
😢27🤷♂3⚡1😁1💯1
HTML Embed Code: