上下文變數物件

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

表示 context 型別的型別物件。

PyTypeObject PyContextVar_Type

表示 context variable 型別的型別物件。

PyTypeObject PyContextToken_Type

表示 context variable 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 將是指向它的指標。如果找到上下文變數,則 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() 返回 token 之前的狀態。此函式在成功時返回 0,在出錯時返回 -1