mirror of
https://github.com/lllyasviel/stable-diffusion-webui-forge.git
synced 2026-07-21 21:01:24 +08:00
cache
This commit is contained in:
parent
b343ae4753
commit
e3a2f78f67
@ -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"]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user