From e3a2f78f677bf2fe9221e3f4243fa07cecce8377 Mon Sep 17 00:00:00 2001 From: Haoming Date: Thu, 31 Jul 2025 14:56:52 +0800 Subject: [PATCH] cache --- modules/cache.py | 65 ++++++++---------------------------------------- 1 file changed, 11 insertions(+), 54 deletions(-) diff --git a/modules/cache.py b/modules/cache.py index f4e5f702..4fd2c19f 100644 --- a/modules/cache.py +++ b/modules/cache.py @@ -1,56 +1,16 @@ -import json -import os -import os.path import threading - import diskcache -import tqdm +import os -from modules.paths import data_path, script_path +from modules.paths import data_path -cache_filename = os.environ.get('SD_WEBUI_CACHE_FILE', os.path.join(data_path, "cache.json")) -cache_dir = os.environ.get('SD_WEBUI_CACHE_DIR', os.path.join(data_path, "cache")) -caches = {} cache_lock = threading.Lock() +cache_dir = os.environ.get("SD_WEBUI_CACHE_DIR", os.path.join(data_path, "cache")) +caches = {} -def dump_cache(): - """old function for dumping cache to disk; does nothing since diskcache.""" - - pass - - -def make_cache(subsection: str) -> diskcache.Cache: - return diskcache.Cache( - os.path.join(cache_dir, subsection), - size_limit=2**32, # 4 GB, culling oldest first - disk_min_file_size=2**18, # keep up to 256KB in Sqlite - ) - - -def convert_old_cached_data(): - try: - with open(cache_filename, "r", encoding="utf8") as file: - data = json.load(file) - except FileNotFoundError: - return - except Exception: - os.replace(cache_filename, os.path.join(script_path, "tmp", "cache.json")) - print('[ERROR] issue occurred while trying to read cache.json; old cache has been moved to tmp/cache.json') - return - - total_count = sum(len(keyvalues) for keyvalues in data.values()) - - with tqdm.tqdm(total=total_count, desc="converting cache") as progress: - for subsection, keyvalues in data.items(): - cache_obj = caches.get(subsection) - if cache_obj is None: - cache_obj = make_cache(subsection) - caches[subsection] = cache_obj - - for key, value in keyvalues.items(): - cache_obj[key] = value - progress.update(1) +dump_cache = lambda: None +"""does nothing since diskcache""" def cache(subsection): @@ -67,12 +27,9 @@ def cache(subsection): cache_obj = caches.get(subsection) if not cache_obj: with cache_lock: - if not os.path.exists(cache_dir) and os.path.isfile(cache_filename): - convert_old_cached_data() - cache_obj = caches.get(subsection) if not cache_obj: - cache_obj = make_cache(subsection) + cache_obj = diskcache.Cache(os.path.join(cache_dir, subsection)) caches[subsection] = cache_obj return cache_obj @@ -91,7 +48,7 @@ def cached_data_for_file(subsection, title, filename, func): Returns: dict or None: The cached or generated data, or None if data generation fails. - The `cached_data_for_file` function implements a caching mechanism for data stored in files. + The function implements a caching mechanism for data stored in files. It checks if the data associated with the given `title` is present in the cache and compares the modification time of the file with the cached modification time. If the file has been modified, the cache is considered invalid and the data is regenerated using the provided `func`. @@ -110,14 +67,14 @@ def cached_data_for_file(subsection, title, filename, func): if ondisk_mtime > cached_mtime: entry = None - if not entry or 'value' not in entry: + if not entry or "value" not in entry: value = func() if value is None: return None - entry = {'mtime': ondisk_mtime, 'value': value} + entry = {"mtime": ondisk_mtime, "value": value} existing_cache[title] = entry dump_cache() - return entry['value'] + return entry["value"]