◇ #پایتون جادوگر دنیای برنامه نویسی!
◇ معرفی حوزه های کاری پایتون
◇ معرفی کتابخونه های کاربردی
◇ معرفی دوره های مفید
◇ معرفی تکنیک ها و نکات
◇ نقشه راه حوزه های مختلف
◇ اخبار و آپدیت های پایتون
◇ و هر چیزی در مورد پایتون!
■ گروه پایتون:
@programmers_py
Post #2156
550
🔆 مدیریت منابع مثل حرفهایها: چطور با with مدیریت خطای تمیز بنویسیم؟
🔹دستور with رو همه برای باز کردن فایل (open) میشناسند، اما قدرتش خیلی بیشتر از این حرفهاست. هر جایی که نیاز به الگوی "آمادهسازی -> اجرا -> تمیزکاری" داری، Context Manager نجاتدهنده است.
🔹دو روش ساخت Context Manager سفارشی:
.روش اول: استفاده از Magic Methodها
با تعریف متدهای enter و exit در کلاس:
🔹روش دوم: راهکار سریعتر با contextlib
بدون نیاز به نوشتن کلاس و فقط با یک Generator:
🔹 به چه دردی میخوره؟
مدیریت Transactionهای دیتابیس، قفلهای Multithreading، و اندازهگیری زمان اجرای سرویسها.
🐍 @python_rd
🔹دستور 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





