[파이썬] contextlib 예제
contextlib
모듈은 컨텍스트 관리자 (Context Manager)를 정의하고 사용하는 데 도움을 주는 유틸리티를 제공합니다. 이 모듈을 사용하여 사용자 정의 컨텍스트 관리자를 만들거나 기존 객체를 컨텍스트 관리자로 변환할 수 있습니다. 아래는 contextlib
모듈을 사용한 예제입니다:
1. contextlib.contextmanager
데코레이터를 사용한 사용자 정의 컨텍스트 관리자:
@contextmanager
데코레이터를 사용하면 함수를 사용하여 간단하게 컨텍스트 관리자를 정의할 수 있습니다.
from contextlib import contextmanager
@contextmanager
def custom_context_manager():
print("Entering the context")
yield
print("Exiting the context")
with custom_context_manager():
print("Inside the context")
# 컨텍스트가 자동으로 종료됨
2. contextlib.closing
을 사용한 리소스 해제:
contextlib.closing
함수를 사용하여 리소스를 컨텍스트 관리자로 변환할 수 있습니다. 일반적으로 파일이나 네트워크 연결과 같은 리소스를 안전하게 관리할 때 사용됩니다.
from contextlib import closing
from urllib.request import urlopen
with closing(urlopen("https://www.example.com")) as webpage:
html = webpage.read()
print(html)
# 웹페이지 연결이 자동으로 닫힘
3. contextlib.ExitStack
을 사용한 다중 컨텍스트 관리자:
contextlib.ExitStack
을 사용하면 여러 개의 컨텍스트 관리자를 동시에 사용할 수 있습니다.
from contextlib import ExitStack
def open_and_close_files():
with ExitStack() as stack:
files = [stack.enter_context(open(f"{i}.txt", "w")) for i in range(3)]
for i, file in enumerate(files):
file.write(f"Content for file {i}")
open_and_close_files() # 파일이 자동으로 닫힘
contextlib
모듈을 사용하면 컨텍스트 관리자를 만들고 관리할 때 더 편리하고 가독성 있는 코드를 작성할 수 있습니다.