1 ماه قبل

بدون دیدگاه

کش در پایتون

کشینگ در پایتون با دکوراتر‌

در این مقاله با مفهوم کشینگ در پایتون آشنا می‌شوید. کشینگ یک تکنیک برای بهبود عملکرد اپلیکیشن‌هاست که با ذخیره‌سازی موقت نتایج محاسباتی، موجب افزایش سرعت دسترسی به داده‌ها می‌شود.

در دنیای برنامه‌نویسی، بهینه‌سازی عملکرد اپلیکیشن‌ها همواره یکی از اولویت‌های اصلی توسعه‌دهندگان است. یکی از روش‌های مؤثر برای این کار، استفاده از کشینگ (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 در پایتون، می‌توان به‌سادگی از این تکنیک استفاده کرده و اپلیکیشن‌های سریع‌تری ایجاد کرد.

اگر تاکنون از کشینگ در پروژه‌های خود استفاده کرده‌اید یا تجربیات خاصی در بهینه‌سازی کدهای پایتون دارید، خوشحال می‌شویم نظرات و تجربیات شما را در بخش دیدگاه‌ها بخوانیم! به نظر شما، کدام روش کشینگ در پایتون مناسب‌تر است؟

منابع:

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیشنهاد های کد اکسپلور