muistox/gallery/cache.py

26 lines
711 B
Python

from django.core.cache import cache
def cached_or_set(key, timeout, func):
value = cache.get(key)
if value is None:
value = func()
cache.set(key, value, timeout)
return value
def cached_or_set_locked(key, timeout, func):
value = cache.get(key)
if value is None:
if cache.add(f"{key}:lock", True, 30): # 30s lukko
value = func()
cache.set(key, value, timeout)
cache.delete(f"{key}:lock")
else:
import time
for _ in range(10): # max 1s odotus
value = cache.get(key)
if value is not None:
break
time.sleep(0.1)
return value