Last updated 2 months ago
twitch: https://twitch.tv/steel
youtube: https://m.youtube.com/channel/UC-o_cRtKA9IIkYBpceKU8ZA
vk: https://vk.com/topsem
inst: https://instagram.com/topsem
Last updated 2 months ago
https://tim-one.github.io/psf/meaculpa
В 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())
```
Выведет:
```
```
Как оно работает?
Появилось два новых важных изменений:
- Поле 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 | Чат |
https://github.com/faster-cpython/ideas/issues/642#issuecomment-2571712347
😁
Тир 1 интерпретатор с tail calls быстрее чем джит :)
https://github.com/python/cpython/issues/127949
Более никаких asyncio policy.
PhD thesis о конструировании высокопроизводительных виртуальных машин для динамических языков.
Я с некоторой долей вероятности уверен что текущие оптимизации в CPython в какой-то мере основаны на этой работе. Ее автор кстати участник faster-cpython команды :)
https://theses.gla.ac.uk/2975/1/2011shannonphd.pdf
За ссылку спасибо @mikhail_efimov!
Вместе с этим, 3.8 более не поддерживается:
https://discuss.python.org/t/python-3-8-is-now-officially-eol/66983
Релизнулся питон 3.13!
Скачать можно тут: https://www.python.org/downloads/release/python-3130/
Что нового: https://docs.python.org/3.13/whatsnew/3.13.html
Last updated 2 months ago
twitch: https://twitch.tv/steel
youtube: https://m.youtube.com/channel/UC-o_cRtKA9IIkYBpceKU8ZA
vk: https://vk.com/topsem
inst: https://instagram.com/topsem
Last updated 2 months ago