TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.1K subscribers
Post #2156 550
🔆 مدیریت منابع مثل حرفه‌ای‌ها: چطور با with مدیریت خطای تمیز بنویسیم؟

🔹دستور with رو همه برای باز کردن فایل (open) می‌شناسند، اما قدرتش خیلی بیشتر از این حرف‌هاست. هر جایی که نیاز به الگوی "آماده‌سازی -> اجرا -> تمیزکاری" داری، Context Manager نجات‌دهنده است.

🔹دو روش ساخت Context Manager سفارشی:

.روش اول: استفاده از Magic Methodها

با تعریف متدهای enter و exit در کلاس:
import time

class Timer:
def __enter__(self):
self.start = time.perf_counter()
return self

def __exit__(self, exc_type, exc_val, exc_tb):
self.end = time.perf_counter()
print(f"زمان اجرا: {self.end - self.start:.4f} ثانیه")
# اگر True برگردانی، خطاهای داخل بلوک with سائلنت می‌شوند!
return False

with Timer():
# کدی که می‌خواهی زمان اجرای آن سنجیده شود
sum(i**2 for i in range(1_000_000))

🔹روش دوم: راهکار سریع‌تر با contextlib

بدون نیاز به نوشتن کلاس و فقط با یک Generator:
from contextlib import contextmanager

@contextmanager
def managed_resource():
print("۱. تخصیص منبع (Connect / Open)")
try:
yield "Resource Object"
finally:
print("۲. آزادسازی منبع (Disconnect / Close)")

# استفاده:
with managed_resource() as res:
print(f"در حال کار با {res}")

🔹 به چه دردی میخوره؟

مدیریت Transactionهای دیتابیس، قفل‌های Multithreading، و اندازه‌گیری زمان اجرای سرویس‌ها.

🐍 @python_rd
  • ❤ 1
More from @python_rd
  1. Oct 15, 2026🔆 آیا enumerate() بهتر از index-based loop است؟ 🔹 خیلی‌ها هنوز این شکلی می‌نویسند: items…
  2. Oct 15, 2026🔆 یک تله عجیب در پایتون: bool در واقع زیرکلاس int است 🔹 خیلی‌ها می‌دانند True == 1 و Fal…
  3. Oct 13, 2026کوییز پایتون 🔆 خروجی اجرای کد زیر چیست؟ t = (1, 2, [3, 4]) try: t[2] += [5] except TypeEr…
  4. Oct 13, 2026🔆 راز مکانیزم پیاده‌سازی و تغییر جهت NaN در الگوریتم مرتب‌سازی پایتون (Timsort) 🔹 باگ ری…
  5. Oct 13, 2026🔆 حذف تاریخی GIL از پایتون (Free-threaded Python) 🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL)…
  6. Oct 11, 2026🔆 مدیریت تمیز منابع با Context Managerهای سفارشی (contextlib) 🔹 ساخت Context Managerها م…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →