上下文变量对象 — Python 文档

来自菜鸟教程
Python/docs/3.9/c-api/contextvars
跳转至:导航、​搜索

上下文变量对象

在 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);

有关更多详细信息,请参阅 :issue:`34762`


3.7 版中的新功能。


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

type PyContext
用于表示 contextvars.Context 对象的 C 结构。
type PyContextVar
用于表示 contextvars.ContextVar 对象的 C 结构。
type PyContextToken
用于表示 contextvars.Token 对象的 C 结构。
PyTypeObject PyContext_Type
表示 context 类型的类型对象。
PyTypeObject PyContextVar_Type
表示 上下文变量 类型的类型对象。
PyTypeObject PyContextToken_Type
表示 上下文变量 token 类型的类型对象。

类型检查宏:

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 将是一个指向它的指针。 如果上下文变量是 not 找到,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 上下文变量的状态重置为它在返回 令牌PyContextVar_Set() 之前的状态。 此函数在成功时返回 0,在错误时返回 -1