[파이썬] 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 모듈을 사용하면 컨텍스트 관리자를 만들고 관리할 때 더 편리하고 가독성 있는 코드를 작성할 수 있습니다.