上下文变量对象

版本 3.7 中的新功能。

版本 3.7.1 中的变化

注意

在 Python 3.7.1 中,所有上下文变量 C API 的签名都已**更改**为使用 PyObject 指针,而不是 PyContextPyContextVarPyContextToken,例如

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

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

有关更多详细信息,请参阅 bpo-34762

本节详细介绍了 contextvars 模块的公共 C API。

type PyContext

用于表示 contextvars.Context 对象的 C 结构体。

type PyContextVar

用于表示 contextvars.ContextVar 对象的 C 结构体。

type PyContextToken

用于表示 contextvars.Token 对象的 C 结构体。

PyTypeObject PyContext_Type

表示*上下文*类型的类型对象。

PyTypeObject PyContextVar_Type

表示*上下文变量*类型的类型对象。

PyTypeObject PyContextToken_Type

表示*上下文变量令牌*类型的类型对象。

类型检查宏

int PyContext_CheckExact(PyObject *o)

如果 *o* 的类型为 PyContext_Type,则返回 true。*o* 不能为 NULL。此函数始终成功。

int PyContextVar_CheckExact(PyObject *o)

如果 *o* 的类型为 PyContextVar_Type,则返回 true。*o* 不能为 NULL。此函数始终成功。

int PyContextToken_CheckExact(PyObject *o)

如果 *o* 的类型为 PyContextToken_Type,则返回 true。*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 将指向它。如果没有找到上下文变量,则 value 将指向

  • default_value(如果不为 NULL);

  • var 的默认值(如果不为 NULL);

  • NULL

NULL 外,该函数返回一个新的引用。

PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
返回值:新引用。

在当前上下文中将 var 的值设置为 value。返回此更改的新标记对象,如果发生错误,则返回 NULL

int PyContextVar_Reset(PyObject *var, PyObject *token)

var 上下文变量的状态重置为调用返回 tokenPyContextVar_Set() 之前的状态。此函数在成功时返回 0,在出错时返回 -1