رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
مفهوم متوسط ۷ دقیقه

زمینه‌بان‌ها

پروتکل زمینه‌بان، contextlib، ساختن مدیر سفارشی و الگوی قفل/فایل/اتصال.

from contextlib import contextmanager

@contextmanager
def timer(label):
    import time
    start = time.perf_counter()
    try:
        yield
    finally:
        print(f"{label}: {time.perf_counter() - start:.3f} ثانیه")

هر چیزی که «گرفتن و آزادکردن» دارد (فایل، قفل، اتصال، تراکنش) باید زمینه‌بان باشد. finally داخلِ مولد تضمین می‌کند آزادسازی حتی با استثنا هم اجرا شود. برای چند منبع، withهای تودرتو یا ExitStack؛ و برای تستِ کدِ دارای زمینه‌بان، همان unittest معمولی کافی است.

برداشت نادرست رایج

اشتباه رایج

زمینه‌بان فقط برای فایل است.

تصحیح

فایل فقط معروف‌ترین مثال است. قفل ریسه، اتصال پایگاه‌داده، تغییر موقت دایرکتوری و زمان‌سنجی همه زمینه‌بان‌اند.

مطالب مرتبط

از همین بخش و با برچسب‌های مشترک

این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

وضعیت پیشرفت برای زمینه‌بان‌ها