guides

Context Managers Deep Dive

Custom context managers and resource handling under Pyvorin.

Published May 30, 2026

Custom Context Manager

class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self
    def __exit__(self, *args):
        elapsed = time.time() - self.start
        print(f"Elapsed: {elapsed:.4f}s")

with Timer():
    result = compute(data)

Context Manager for Resources

class ConnectionPool:
    def __init__(self, max_size: int):
        self.max_size = max_size
        self.available = max_size

    def acquire(self):
        self.available -= 1
        return self

    def release(self):
        self.available += 1

    def __enter__(self):
        return self.acquire()

    def __exit__(self, *args):
        self.release()