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

تلاش مجدد با زمینه‌بان

یک اتصال شبیه‌سازی‌شده بساز که دوبار اول خطا می‌دهد؛ با تلاش مجدد وصل شو و آزادسازی را تضمین کن.

صورت مسئله

یک اتصال شبیه‌سازی‌شده بساز که دوبار اول خطا می‌دهد؛ با تلاش مجدد وصل شو و آزادسازی را تضمین کن.

مثال حل‌شده

اتصالِ شکننده

متوسط

صورت مسئله

اتصال دوبار اول ConnectionError می‌دهد و بار سوم موفق است. کدی بنویس که حداکثر ۳ بار تلاش کند و اتصال را همیشه ببندد.

راه‌حل گام‌به‌گام

    ۴ گام باقی مانده
    from contextlib import contextmanager
    
    attempts = {"n": 0}
    
    @contextmanager
    def connection():
        print("اتصال باز شد.")
        try:
            yield "conn"
        finally:
            print("اتصال بسته شد.")
    
    def fragile_fetch():
        attempts["n"] += 1
        if attempts["n"] < 3:
            raise ConnectionError("قطعی موقت.")
        return "داده رسید!"
    
    with connection():
        for i in range(3):
            try:
                print(fragile_fetch())
                break
            except ConnectionError as e:
                print(f"تلاش {i+1} ناموفق: {e}")

    مطالب مرتبط

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

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

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