컨텍스트 변수 객체

Added in version 3.7.

버전 3.7.1에서 변경:

참고

파이썬 3.7.1에서 모든 컨텍스트 변수 C API의 서명이 PyContext, PyContextVarPyContextToken 대신 PyObject 포인터를 사용하도록 변경되었습니다, 예를 들어:

// 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

컨텍스트 변수 형을 나타내는 형 객체.

PyTypeObject PyContextToken_Type

컨텍스트 변수 토큰 형을 나타내는 형 객체.

형 검사 매크로:

int PyContext_CheckExact(PyObject *o)

oPyContext_Type 형이면 참을 돌려줍니다. oNULL이 아니어야 합니다. 이 함수는 항상 성공합니다.

int PyContextVar_CheckExact(PyObject *o)

oPyContextVar_Type 형이면 참을 돌려줍니다. oNULL이 아니어야 합니다. 이 함수는 항상 성공합니다.

int PyContextToken_CheckExact(PyObject *o)

oPyContextToken_Type 형이면 참을 돌려줍니다. oNULL이 아니어야 합니다. 이 함수는 항상 성공합니다.

컨텍스트 객체 관리 함수:

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을 반환합니다.

int PyContext_AddWatcher(PyContext_WatchCallback callback)

현재 인터프리터에 대한 컨텍스트 객체 감시자로 callback을 등록합니다. PyContext_ClearWatcher()에 전달할 수 있는 ID를 반환합니다. 에러가 발생한 경우(예를 들어, 사용 가능한 감시자 ID가 더 이상 없는 경우) -1을 반환하고 예외를 설정합니다.

Added in version 3.14.

int PyContext_ClearWatcher(int watcher_id)

현재 인터프리터에 대해 PyContext_AddWatcher()에서 이전에 반환된 watcher_id로 식별된 감시자를 지웁니다. 성공 시 0을 반환하고, 에러 시(예를 들어, 주어진 watcher_id가 등록된 적이 없는 경우) -1을 반환하고 예외를 설정합니다.

Added in version 3.14.

type PyContextEvent

컨텍스트 객체 감시자 이벤트의 가능한 열거형:

  • Py_CONTEXT_SWITCHED: 현재 컨텍스트가 다른 컨텍스트로 전환되었습니다. 감시자 콜백에 전달된 객체는 이제 현재 contextvars.Context 객체이거나, 현재 컨텍스트가 없는 경우 None입니다.

Added in version 3.14.

typedef int (*PyContext_WatchCallback)(PyContextEvent event, PyObject *obj)

컨텍스트 객체 감시자 콜백 함수. 콜백에 전달된 객체는 이벤트마다 다릅니다. 자세한 내용은 PyContextEvent를 참조하십시오.

콜백이 예외가 설정된 상태로 반환되면, 반드시 -1을 반환해야 합니다; 이 예외는 PyErr_FormatUnraisable()을 사용하여 발생할 수 없는 예외로 인쇄됩니다. 그렇지 않으면 0을 반환해야 합니다.

콜백에 진입할 때 이미 예외가 설정되어 있을 수 있습니다. 이 경우, 콜백은 해당 예외를 그대로 유지한 채 0을 반환해야 합니다. 콜백에서 예외를 설정할 수 있는 다른 API를 호출하려면, 먼저 기존의 예외 상태를 저장하고 지운 후 반환 직전에 이를 다시 복원해야 합니다.

Added in version 3.14.

컨텍스트 변수 함수:

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 컨텍스트 변수의 상태를 token을 반환한 PyContextVar_Set() 호출 전의 상태로 재설정합니다. 이 함수는 성공 시 0을 반환하고, 에러 시 -1을 반환합니다.