More Context Manager Patterns

Python PatternsFree Lesson

Advertisement

More Context Manager Patterns

Async context managers, nested contexts, and advanced patterns.

Overview

Master advanced context manager patterns.

Async Context Managers

import asyncio
from contextlib import asynccontextmanager

@asynccontextmanager
async def async_resource(name):
    print(f"Acquiring {name}")
    await asyncio.sleep(0.1)
    resource = {"name": name, "active": True}
    try:
        yield resource
    finally:
        print(f"Releasing {name}")

async def main():
    async with async_resource("database") as db:
        print(f"Using {db}")

asyncio.run(main())

ExitStack

from contextlib import ExitStack

def process_files(filenames):
    with ExitStack() as stack:
        files = [
            stack.enter_context(open(fn, 'r'))
            for fn in filenames
        ]
        for f in files:
            print(f.read())

Practice

Implement an async context manager for a connection pool.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement