cache MapHistory in-process not external cache
This commit is contained in:
parent
8602f4f39e
commit
3ce5fc03fd
1 changed files with 18 additions and 9 deletions
|
@ -1,11 +1,11 @@
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import struct
|
import struct
|
||||||
|
import threading
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.cache import cache
|
|
||||||
from django.db.models.signals import m2m_changed, post_delete
|
from django.db.models.signals import m2m_changed, post_delete
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from shapely import prepared
|
from shapely import prepared
|
||||||
|
@ -65,15 +65,24 @@ class MapHistory:
|
||||||
def open_level(cls, level_id, mode, default_update=None):
|
def open_level(cls, level_id, mode, default_update=None):
|
||||||
return cls.open(cls.level_filename(level_id, mode), default_update)
|
return cls.open(cls.level_filename(level_id, mode), default_update)
|
||||||
|
|
||||||
|
cached = {}
|
||||||
|
cache_key = None
|
||||||
|
cache_lock = threading.Lock()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def open_level_cached(cls, level_id, mode, cache_key=None):
|
def open_level_cached(cls, level_id, mode):
|
||||||
if cache_key is None:
|
with cls.cache_lock:
|
||||||
cache_key = MapUpdate.current_cache_key()
|
cache_key = MapUpdate.current_processed_cache_key()
|
||||||
cache_key = 'mapdata:map-history-%d-%s:%s' % (level_id, mode, cache_key)
|
if cls.cache_key != cache_key:
|
||||||
result = cache.get(cache_key, None)
|
cls.cache_key = cache_key
|
||||||
if result is None:
|
cls.cached = {}
|
||||||
|
else:
|
||||||
|
result = cls.cached.get((level_id, mode), None)
|
||||||
|
if result is not None:
|
||||||
|
return result
|
||||||
|
|
||||||
result = cls.open_level(level_id, mode)
|
result = cls.open_level(level_id, mode)
|
||||||
cache.set(cache_key, result, 120)
|
cls.cached[(level_id, mode)] = result
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def save(self, filename=None):
|
def save(self, filename=None):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue