Веб-версияОткрыть в Telegram

ПостВ asyncio добавили возможность смотреть граф вызова корутин

23 января 2025
К
Коробка с питоном
Ссылка
нажмите — покажем
В asyncio добавили возможность смотреть граф вызова корутин Ждем в 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 | Чат |
14 · 894 ·

Рядом в ленте

ККоробка с питономСамым залайканным оказался вот этот мемас, приз отправлен автору!ККоробка с питономСегодня расскажу про модуль, который поможет остановить время в ваших тестах и не только - FreezeGun Сначала история из жизни. Недавно мне принесли скрипт, кото
это сообщение
ККоробка с питономBreaking: PEP 750 - Template Strings был принят: https://github.com/python/steering-council/issues/275#issuecomment-2794619570ККоробка с питономВроде крутой PEP, но напрашиваются вопросы: 1. Умрут ли всякие шаблонизаторы, по типу Jinja/Mako? В самом PEP пишут что они необходимы в качестве использования
ККоробка с питономКоробка с питоном@boxwithpython · канал · Технологии
488подписчиков154постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем