python context manager
date: 2022-11-17 excerpt: pythonのcontext managerの使い方
pythonのcontext managerの使い方
概要
with
ステートメントで自動でリソースを開放するを行える機能- 関数デコレータで実装する方法と、クラスで実装する方法がある
関数デコレータで実装する方法
from contextlib import contextmanager
@contextmanager
def section(name):
print(f"=== {name} 開始 ===")
yield
print(f"=== {name} 終了 ===")
with section("データ読み込み"):
# データを読み込む処理
data = load_data()
print("データを読み込みました")
with section("データ処理"):
# データを処理するコード
processed_data = process_data(data)
print("データを処理しました")
クラスで実装する方法
# クラスで定義する方法
class MyMeasureContextManager:
def __init__(self):
self.tlog = None
def __enter__(self):
self.tlog = time.time()
def __exit__(self, type, value, traceback):
elp = time.time() - self.tlog
logger.info(f"exit, elapsed = {elp}")
with MyMeasureContextManager():
time.sleep(1.0)
"""
2022-11-17 04:11:03.385 | INFO | __main__:__exit__:8 - exit, elapsed = 1.0011460781097412
"""