Контекстные переменные Объекты

Added in version 3.7.

Изменено в версии 3.7.1:

Примечание

В Python 3.7.1 сигнатуры всех контекстных переменных C API были изменены для использования указателей PyObject вместо PyContext, PyContextVar и PyContextToken, например:

// in 3.7.0:
PyContext *PyContext_New(void);

// in 3.7.1+:
PyObject *PyContext_New(void);

Более подробную информацию см. в разделе bpo-34762.

В этом разделе описывается общедоступный API на языке C для модуля contextvars.

type PyContext

Структура языка C, используемая для представления объекта contextvars.Context.

type PyContextVar

Структура языка C, используемая для представления объекта contextvars.ContextVar.

type PyContextToken

Структура языка C, используемая для представления объекта contextvars.Token.

PyTypeObject PyContext_Type

Объект типа, представляющий тип контекста.

PyTypeObject PyContextVar_Type

Объект типа, представляющий тип контекстной переменной.

PyTypeObject PyContextToken_Type

Объект типа, представляющий тип маркер контекстной переменной.

Макросы с проверкой типа:

int PyContext_CheckExact(PyObject *o)

Возвращает true, если o имеет тип PyContext_Type. o не должно быть NULL. Эта функция всегда успешна.

int PyContextVar_CheckExact(PyObject *o)

Возвращает true, если o имеет тип PyContextVar_Type. o не должно быть NULL. Эта функция всегда успешна.

int PyContextToken_CheckExact(PyObject *o)

Возвращает true, если o имеет тип PyContextToken_Type. o не должно быть NULL. Эта функция всегда успешна.

Функции управления контекстными объектами:

PyObject *PyContext_New(void)
Возвращаемое значение: Новая ссылка.

Создает новый пустой объект контекста. Возвращает NULL, если произошла ошибка.

PyObject *PyContext_Copy(PyObject *ctx)
Возвращаемое значение: Новая ссылка.

Создает неглубокую копию переданного объекта контекста ctx. Возвращает NULL, если произошла ошибка.

PyObject *PyContext_CopyCurrent(void)
Возвращаемое значение: Новая ссылка.

Создает неглубокую копию контекста текущего потока. Возвращает NULL, если произошла ошибка.

int PyContext_Enter(PyObject *ctx)

Устанавливает ctx в качестве текущего контекста для текущего потока. Возвращает 0 при успехе и -1 при ошибке.

int PyContext_Exit(PyObject *ctx)

Деактивирует контекст ctx и восстанавливает предыдущий контекст в качестве текущего контекста для текущего потока. Возвращает 0 при успехе и -1 при ошибке.

Функции контекстной переменной:

PyObject *PyContextVar_New(const char *name, PyObject *def)
Возвращаемое значение: Новая ссылка.

Создайте новый объект ContextVar. Параметр name используется для самопроверки и отладки. Параметр def задает значение по умолчанию для контекстной переменной или NULL для отсутствия значения по умолчанию. Если произошла ошибка, эта функция возвращает NULL.

int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value)

Получение значения контекстной переменной. Возвращает -1, если при поиске произошла ошибка, и 0, если ошибки не произошло, независимо от того, найдено значение или нет.

Если контекстная переменная была найдена, value будет указателем на нее. Если контекстная переменная не найдена, значение будет указывать на:

  • значение_по_умолчанию, если не NULL;

  • значение по умолчанию для var, если не NULL;

  • NULL

За исключением NULL, функция возвращает новую ссылку.

PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
Возвращаемое значение: Новая ссылка.

Устанавливает значение var в value в текущем контексте. Возвращает новый объект токена для этого изменения или NULL, если произошла ошибка.

int PyContextVar_Reset(PyObject *var, PyObject *token)

Сброс состояния контекстной переменной var до состояния, в котором она находилась до вызова PyContextVar_Set(), вернувшего токен. Эта функция возвращает 0 при успехе и -1 при ошибке.