Документация Python неофициальный перевод

perfmaps.md

41 строк · 4.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.12/c-api/perfmaps.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Поддержка Perf Maps89На поддерживаемых платформах (на момент написания – только Linux) среда выполнения может использовать *файлы perf map*, чтобы сделать функции Python видимыми для внешнего инструмента профилирования (например, [perf](https://python-all.ru/3.12/c-api/perfmaps.html)). Работающий процесс может создать файл в каталоге `/tmp`, содержащий записи, которые могут сопоставить участок исполняемого кода с именем. Этот интерфейс описан в [документации инструмента Linux Perf](https://python-all.ru/3.12/c-api/perfmaps.html).1011В Python эти вспомогательные API могут использоваться библиотеками и возможностями, которые генерируют машинный код на лету.1213Для этих API не требуется удерживать глобальную блокировку интерпретатора (GIL).1415#### `int PyUnstable_PerfMapState_Init(void)`1617> *Это [нестабильное API](https://python-all.ru/3.12/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*1819Открывает файл `/tmp/perf-$pid.map`, если он ещё не открыт, и создаёт блокировку для обеспечения потокобезопасной записи в файл (при условии, что записи выполняются через [`PyUnstable_WritePerfMapEntry()`](https://python-all.ru/3.12/c-api/perfmaps.html#c.PyUnstable_WritePerfMapEntry)). Обычно нет необходимости вызывать эту функцию явно; просто используйте [`PyUnstable_WritePerfMapEntry()`](https://python-all.ru/3.12/c-api/perfmaps.html#c.PyUnstable_WritePerfMapEntry), и она инициализирует состояние при первом вызове.2021Возвращает `0` при успехе, `-1` при неудаче создания/открытия файла perf map или `-2` при неудаче создания блокировки. Проверьте `errno` для получения дополнительной информации о причине сбоя.2223#### `int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name)`2425> *Это [нестабильное API](https://python-all.ru/3.12/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*2627Записывает одну запись в файл `/tmp/perf-$pid.map`. Эта функция потокобезопасна. Вот как выглядит пример записи:2829```c30# address      size  name317f3529fcf759 b     py::bar:/run/t.py32```3334Вызовет [`PyUnstable_PerfMapState_Init()`](https://python-all.ru/3.12/c-api/perfmaps.html#c.PyUnstable_PerfMapState_Init) перед записью записи, если файл perf map ещё не открыт. Возвращает `0` при успехе или те же коды ошибок, что и [`PyUnstable_PerfMapState_Init()`](https://python-all.ru/3.12/c-api/perfmaps.html#c.PyUnstable_PerfMapState_Init), при неудаче.3536#### `void PyUnstable_PerfMapState_Fini(void)`3738> *Это [нестабильное API](https://python-all.ru/3.12/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*3940Закрывает файл perf map, открытый с помощью [`PyUnstable_PerfMapState_Init()`](https://python-all.ru/3.12/c-api/perfmaps.html#c.PyUnstable_PerfMapState_Init). Эта функция вызывается самой средой выполнения при завершении интерпретатора. В целом, нет причин вызывать её явно, за исключением обработки особых сценариев, таких как форк.41