contextvars.md
1> **Источник:** https://python-all.ru/3.9/c-api/contextvars.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты контекстных переменных89> **Примечание**10>11> Изменено в версии 3.7.1:12>13> В Python 3.7.1 сигнатуры всех C API контекстных переменных были **изменены**, чтобы использовать указатели [`PyObject`](https://python-all.ru/3.9/c-api/structures.html#c.PyObject) вместо [`PyContext`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContext), [`PyContextVar`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContextVar) и [`PyContextToken`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContextToken), например:14>15> ```c16> // в 3.7.0:17> PyContext *PyContext_New(void);18>19> // в 3.7.1+:20> PyObject *PyContext_New(void);21> ```22>23> См. [bpo-34762](https://python-all.ru/3.9/c-api/contextvars.html) для подробностей.2425Добавлено в версии 3.7.2627В этом разделе описывается публичный C API для модуля [`contextvars`](https://python-all.ru/3.9/library/contextvars.html#module-contextvars).2829**`PyContext`**3031Структура C, используемая для представления объекта [`contextvars.Context`](https://python-all.ru/3.9/library/contextvars.html#contextvars.Context).3233**`PyContextVar`**3435Структура C, используемая для представления объекта [`contextvars.ContextVar`](https://python-all.ru/3.9/library/contextvars.html#contextvars.ContextVar).3637**`PyContextToken`**3839Структура C, используемая для представления объекта [`contextvars.Token`](https://python-all.ru/3.9/library/contextvars.html#contextvars.Token).4041**[PyTypeObject](https://python-all.ru/3.9/c-api/type.html#c.PyTypeObject) `PyContext_Type`**4243Объект типа, представляющий тип *контекст*.4445**[PyTypeObject](https://python-all.ru/3.9/c-api/type.html#c.PyTypeObject) `PyContextVar_Type`**4647Объект типа, представляющий тип *контекстной переменной*.4849**[PyTypeObject](https://python-all.ru/3.9/c-api/type.html#c.PyTypeObject) `PyContextToken_Type`**5051Объект типа, представляющий тип *токена контекстной переменной*.5253Макросы проверки типа:5455#### `int PyContext_CheckExact(PyObject *o)`5657Возвращает true, если *o* имеет тип [`PyContext_Type`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContext_Type). *o* не должно быть `NULL`. Эта функция всегда завершается успешно.5859#### `int PyContextVar_CheckExact(PyObject *o)`6061Возвращает true, если *o* имеет тип [`PyContextVar_Type`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContextVar_Type). *o* не должно быть `NULL`. Эта функция всегда завершается успешно.6263#### `int PyContextToken_CheckExact(PyObject *o)`6465Возвращает true, если *o* имеет тип [`PyContextToken_Type`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContextToken_Type). *o* не должно быть `NULL`. Эта функция всегда завершается успешно.6667Функции управления объектами контекста:6869#### `PyObject *PyContext_New(void)`7071*Возвращаемое значение: новая ссылка.*7273Создаёт новый пустой объект контекста. Возвращает `NULL`, если произошла ошибка.7475#### `PyObject *PyContext_Copy(PyObject *ctx)`7677*Возвращаемое значение: новая ссылка.*7879Создаёт поверхностную копию переданного объекта контекста *ctx*. Возвращает `NULL`, если произошла ошибка.8081#### `PyObject *PyContext_CopyCurrent(void)`8283*Возвращаемое значение: новая ссылка.*8485Создаёт поверхностную копию контекста текущего потока. Возвращает `NULL`, если произошла ошибка.8687#### `int PyContext_Enter(PyObject *ctx)`8889Устанавливает *ctx* в качестве текущего контекста для текущего потока. Возвращает `0` в случае успеха и `-1` в случае ошибки.9091#### `int PyContext_Exit(PyObject *ctx)`9293Деактивирует контекст *ctx* и восстанавливает предыдущий контекст как текущий для текущего потока. Возвращает `0` в случае успеха и `-1` в случае ошибки.9495Функции контекстных переменных:9697#### `PyObject *PyContextVar_New(const char *name, PyObject *def)`9899*Возвращаемое значение: новая ссылка.*100101Создаёт новый объект `ContextVar`. Параметр *name* используется для интроспекции и отладки. Параметр *def* задаёт значение по умолчанию для контекстной переменной или `NULL`, если значение не требуется. Если произошла ошибка, эта функция возвращает `NULL`.102103#### `int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value)`104105Получает значение контекстной переменной. Возвращает `-1`, если при поиске произошла ошибка, и `0`, если ошибки не было, независимо от того, было ли найдено значение.106107Если контекстная переменная найдена, *value* будет указателем на неё. Если контекстная переменная *не* найдена, *value* будет указывать на:108109- *default\_value*, если не `NULL`;110- значение по умолчанию *var*, если не `NULL`;111- `NULL`112113За исключением `NULL`, функция возвращает новую ссылку.114115#### `PyObject *PyContextVar_Set(PyObject *var, PyObject *value)`116117*Возвращаемое значение: новая ссылка.*118119Устанавливает значение *var* равным *value* в текущем контексте. Возвращает новый объект токена для этого изменения или `NULL`, если произошла ошибка.120121#### `int PyContextVar_Reset(PyObject *var, PyObject *token)`122123Сбрасывает состояние контекстной переменной *var* к тому, в котором она была до вызова [`PyContextVar_Set()`](https://python-all.ru/3.9/c-api/contextvars.html#c.PyContextVar_Set), вернувшего *token*. Эта функция возвращает `0` в случае успеха и `-1` в случае ошибки.124