در دنیای برنامهنویسی، بهینهسازی عملکرد اپلیکیشنها همواره یکی از اولویتهای اصلی توسعهدهندگان است. یکی از روشهای مؤثر برای این کار، استفاده از کشینگ (Caching) است. کشینگ به معنای ذخیرهسازی موقت نتایج محاسباتی و استفاده مجدد از آنها در آینده است. در این مقاله از کداکسپلور، به بررسی مفهوم کشینگ در پایتون و روشهای استفاده از دکوراتورهای @lru_cache
و @cache
برای بهبود عملکرد برنامهها خواهیم پرداخت.
کشینگ چیست؟
کشینگ تکنیکی است که به کمک آن میتوان نتایج محاسباتی و پردازشی را بهصورت موقت ذخیره و در دفعات بعدی از آنها استفاده کرد. بهاینترتیب، بهجای تکرار مجدد یک محاسبه یا درخواست، نتیجه قبلی از کش بازخوانی میشود و این موضوع به طور چشمگیری زمان اجرای برنامه را کاهش میدهد.
معرفی @lru_cache
و @cache
در پایتون
در پایتون دو دکوراتور مهم برای کشینگ وجود دارد که عبارتند از:
بیشتر بخوانید: دکوراتور چیست؟
@cache
: این دکوراتور در نسخههای جدیدتر پایتون معرفی شده و شباهت زیادی به @lru_cache
دارد، با این تفاوت که محدودیتی در تعداد دادههای ذخیرهشده ندارد و از الگوریتم LRU استفاده نمیکند.
@lru_cache
: این دکوراتور، نتایج محاسباتی را با استفاده از الگوریتم “کمترین استفادهشده اخیراً” (Least Recently Used – LRU) ذخیره میکند. این روش برای بهینهسازی محاسبات تکراری بسیار مفید است.
نحوه استفاده از @lru_cache
و @cache
برای استفاده از این دو دکوراتور، کافی است تابعی که قرار است نتایج آن کش شود را با این دکوراتورها علامتگذاری کنیم. در ادامه دو مثال از نحوه استفاده از هر کدام از این دکوراتورها آورده شده است:
مثال با @lru_cache
import functools @functools.lru_cache(maxsize=100) def fibonacci(n): if n < 2: return n return fibonacci(n-1) + fibonacci(n-2)
در این مثال، تابع fibonacci
با استفاده از @lru_cache
کش میشود و حداکثر 100 مقدار مختلف در کش ذخیره میشود.
مثال با @cache
import functools @functools.cache def factorial(n): if n == 0: return 1 return n * factorial(n-1)
در این مثال، تابع factorial
با استفاده از @cache
کش میشود و هیچ محدودیتی در تعداد نتایج ذخیرهشده وجود ندارد.
موارد استفاده از کشینگ
کشینگ بهویژه در مواردی که محاسبات سنگینی تکرار میشوند یا دادهها بهطور مداوم از منابع خارجی (مثل پایگاه دادهها یا API) دریافت میشوند، بسیار مفید است. برخی از کاربردهای کشینگ عبارتند از:
- اپلیکیشنهای وب: کاهش زمان دسترسی به دادهها
- یادگیری ماشین: ذخیره مدلهای محاسباتی پیچیده
- سیستمهای پردازشی سنگین: کاهش بار محاسباتی
نتیجهگیری
کشینگ یکی از بهترین روشها برای بهبود عملکرد برنامهها و کاهش زمان اجرای محاسبات تکراری است. با استفاده از دکوراتورهای @lru_cache
و @cache
در پایتون، میتوان بهسادگی از این تکنیک استفاده کرده و اپلیکیشنهای سریعتری ایجاد کرد.
اگر تاکنون از کشینگ در پروژههای خود استفاده کردهاید یا تجربیات خاصی در بهینهسازی کدهای پایتون دارید، خوشحال میشویم نظرات و تجربیات شما را در بخش دیدگاهها بخوانیم! به نظر شما، کدام روش کشینگ در پایتون مناسبتر است؟
منابع: