> **Источник:** https://python-all.ru/3.13/c-api/perfmaps.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Поддержка Perf Maps

На поддерживаемых платформах (на момент написания – только Linux) среда выполнения может использовать *файлы perf map*, чтобы сделать функции Python видимыми для внешнего инструмента профилирования (например, [perf](https://python-all.ru/3.13/c-api/perfmaps.html)). Работающий процесс может создать файл в каталоге `/tmp`, содержащий записи, которые могут сопоставить участок исполняемого кода с именем. Этот интерфейс описан в [документации инструмента Linux Perf](https://python-all.ru/3.13/c-api/perfmaps.html).

В Python эти вспомогательные API могут использоваться библиотеками и возможностями, которые генерируют машинный код на лету.

Для этих API не требуется удерживать глобальную блокировку интерпретатора (GIL).

#### `int PyUnstable_PerfMapState_Init(void)`

> *Это [нестабильное API](https://python-all.ru/3.13/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*

Открывает файл `/tmp/perf-$pid.map`, если он ещё не открыт, и создаёт блокировку для обеспечения потокобезопасной записи в файл (при условии, что записи выполняются через [`PyUnstable_WritePerfMapEntry()`](https://python-all.ru/3.13/c-api/perfmaps.html#c.PyUnstable_WritePerfMapEntry)). Обычно нет необходимости вызывать эту функцию явно; просто используйте `PyUnstable_WritePerfMapEntry()`, и она инициализирует состояние при первом вызове.

Возвращает `0` при успехе, `-1` при неудаче создания/открытия файла perf map или `-2` при неудаче создания блокировки. Проверьте `errno` для получения дополнительной информации о причине сбоя.

#### `int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name)`

> *Это [нестабильное API](https://python-all.ru/3.13/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*

Записывает одну запись в файл `/tmp/perf-$pid.map`. Эта функция потокобезопасна. Вот как выглядит пример записи:

```c
# address      size  name
7f3529fcf759 b     py::bar:/run/t.py
```

Вызовет [`PyUnstable_PerfMapState_Init()`](https://python-all.ru/3.13/c-api/perfmaps.html#c.PyUnstable_PerfMapState_Init) перед записью записи, если файл perf map ещё не открыт. Возвращает `0` при успехе или те же коды ошибок, что и `PyUnstable_PerfMapState_Init()`, при неудаче.

#### `void PyUnstable_PerfMapState_Fini(void)`

> *Это [нестабильное API](https://python-all.ru/3.13/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*

Закрывает файл perf map, открытый с помощью [`PyUnstable_PerfMapState_Init()`](https://python-all.ru/3.13/c-api/perfmaps.html#c.PyUnstable_PerfMapState_Init). Эта функция вызывается самой средой выполнения при завершении интерпретатора. В целом, нет причин вызывать её явно, за исключением обработки особых сценариев, таких как форк.
