Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 컨텍스트 변수(Context Variables) 완벽 가이드

파이썬 컨텍스트 변수란?

컨텍스트 변수(Context Variable)는 실행되는 컨텍스트에 따라 서로 다른 값을 가질 수 있는 변수입니다. 각 실행 스레드마다 변수의 값이 다를 수 있는 스레드 로컬 저장소(Thread-Local Storage)와 달리, 컨텍스트 변수는 하나의 실행 스레드 안에서도 여러 개의 컨텍스트를 가질 수 있습니다. 이러한 특성 덕분에 동시에 실행되는 비동기 작업에서 변수를 추적하고 관리하는 데 매우 유용합니다.

ContextVar 클래스로 컨텍스트 변수 선언하기

컨텍스트 변수는 contextvars 모듈의 ContextVar 클래스를 사용하여 선언하고 다룰 수 있습니다.

import contextvars
name = contextvars.ContextVar("name", default = 'Hello')

default 매개변수는 선택 사항으로, 현재 컨텍스트에서 해당 변수의 값이 발견되지 않을 때 ContextVar.get() 메서드가 반환하는 기본값입니다.

name: 변수의 이름을 나타내며, 읽기 전용(read-only) 속성입니다.

ContextVar 클래스의 주요 메서드

ContextVar 클래스에는 다음과 같은 메서드가 정의되어 있습니다.

get()현재 컨텍스트에서 해당 컨텍스트 변수의 값을 반환합니다. 현재 컨텍스트에 변수의 값이 없는 경우 다음 중 하나가 수행됩니다.
  • 메서드 호출 시 default 인자가 제공되었다면 그 값을 반환하거나,

  • 컨텍스트 변수 생성 시 기본값이 설정되어 있다면 그 기본값을 반환하거나,

  • 그 외의 경우 LookupError 예외를 발생시킵니다.

set()현재 컨텍스트에서 컨텍스트 변수에 새로운 값을 설정할 때 호출합니다.
reset()컨텍스트 변수를 토큰(token)을 생성한 ContextVar.set() 호출 이전의 값으로 되돌립니다.

Context 클래스

contextvars 모듈의 Context 클래스는 컨텍스트 변수와 그 값들을 매핑(mapping)한 객체입니다.

Context(): 아무런 값도 포함하지 않은 빈 컨텍스트를 생성합니다.

현재 실행 중인 컨텍스트의 복사본을 얻으려면 copy_context() 함수를 사용합니다.

run(callable, *args, **kwargs) 메서드는 callable(*args, **kwargs) 코드를 run 메서드가 호출된 컨텍스트 객체 내에서 실행하고, 그 실행 결과를 반환합니다. callable이 컨텍스트 변수에 가한 변경 사항은 모두 해당 컨텍스트 객체 내에만 포함됩니다. 또한 동일한 컨텍스트 객체에 대해 둘 이상의 OS 스레드에서 호출하거나 재귀적으로 호출하면 RuntimeError가 발생합니다.

Context 객체의 주요 메서드

copy()컨텍스트 객체의 얕은 복사본(shallow copy)을 반환합니다.
context[var]var 컨텍스트 변수의 값을 반환합니다. 해당 변수가 컨텍스트 객체에 설정되어 있지 않으면 KeyError가 발생합니다.
get()컨텍스트 객체에 해당 컨텍스트 변수의 값이 있으면 그 값을 반환하고, 없으면 기본값(default)을 반환합니다. 기본값이 지정되지 않았다면 None을 반환합니다.
iter()컨텍스트 객체에 저장된 변수들을 순회하는 반복자(iterator)를 반환합니다.
len()컨텍스트 객체에 설정된 변수의 개수를 반환합니다.
keys()컨텍스트 객체의 모든 변수 목록을 반환합니다.
values()컨텍스트 객체의 모든 변수 값 목록을 반환합니다.
items()컨텍스트 객체의 모든 변수와 그 값들을 담은 2-튜플(2-tuple) 목록을 반환합니다.