Ejemplo n.º 1
0
 def __init__(self,
              prefix: str = None,
              base_dir: str = None,
              config: Config = None,
              trace_perf: bool = DEFAULT_TRACE_PERF,
              tile_comp_mode: int = None,
              tile_cache_capacity: int = None,
              ml_dataset_openers: Dict[str,
                                       MultiLevelDatasetOpener] = None):
     self._prefix = normalize_prefix(prefix)
     self._base_dir = os.path.abspath(base_dir or '')
     self._config = config if config is not None else dict()
     self._config_mtime = 0.0
     self._place_group_cache = dict()
     self._feature_index = 0
     self._ml_dataset_openers = ml_dataset_openers
     self._tile_comp_mode = tile_comp_mode
     self._trace_perf = trace_perf
     self._lock = threading.RLock()
     self._dataset_cache = dict(
     )  # contains tuples of form (MultiLevelDataset, ds_descriptor)
     self._image_cache = dict()
     if tile_cache_capacity and tile_cache_capacity > 0:
         self._tile_cache = Cache(MemoryCacheStore(),
                                  capacity=tile_cache_capacity,
                                  threshold=0.75)
     else:
         self._tile_cache = None
Ejemplo n.º 2
0
    def test_store_and_restore_and_discard(self):
        cache_store = TracingCacheStore()
        cache = Cache(store=cache_store, capacity=1000)

        self.assertIs(cache.store, cache_store)
        self.assertEqual(cache.size, 0)
        self.assertEqual(cache.max_size, 750)

        cache_store.trace = ''
        cache.put_value('k1', 'x')
        self.assertEqual(cache.get_value('k1'), 'x')
        self.assertEqual(cache.size, 100)
        self.assertEqual(cache_store.trace, 'store(k1, x);restore(k1, S/x);')

        cache_store.trace = ''
        cache.remove_value('k1')
        self.assertEqual(cache.size, 0)
        self.assertEqual(cache_store.trace, 'discard(k1, S/x);')
        cache_store.trace = ''

        cache_store.trace = ''
        cache.put_value('k1', 'x')
        cache.put_value('k1', 'xx')
        self.assertEqual(cache.get_value('k1'), 'xx')
        self.assertEqual(cache.size, 200)
        self.assertEqual(
            cache_store.trace,
            'store(k1, x);discard(k1, S/x);store(k1, xx);restore(k1, S/xx);')

        cache_store.trace = ''
        cache.remove_value('k1')
        self.assertEqual(cache.size, 0)
        self.assertEqual(cache_store.trace, 'discard(k1, S/xx);')

        cache_store.trace = ''
        cache.put_value('k1', 'x')
        cache.put_value('k2', 'xxx')
        cache.put_value('k3', 'xx')
        self.assertEqual(cache.get_value('k1'), 'x')
        self.assertEqual(cache.get_value('k2'), 'xxx')
        self.assertEqual(cache.get_value('k3'), 'xx')
        self.assertEqual(cache.size, 600)
        self.assertEqual(
            cache_store.trace, 'store(k1, x);store(k2, xxx);store(k3, xx);'
            'restore(k1, S/x);restore(k2, S/xxx);restore(k3, S/xx);')

        cache_store.trace = ''
        cache.put_value('k4', 'xxxx')
        self.assertEqual(cache.size, 600)
        self.assertEqual(
            cache_store.trace,
            'store(k4, xxxx);discard(k1, S/x);discard(k2, S/xxx);')

        cache_store.trace = ''
        cache.clear()
        self.assertEqual(cache.size, 0)
Ejemplo n.º 3
0
    def test_load_from_key(self):
        cache_store = TracingCacheStore()
        cache = Cache(store=cache_store, capacity=1000)

        cache_store.trace = ''
        self.assertEqual(cache.get_value('k1'), None)
        self.assertEqual(cache.size, 0)
        self.assertEqual(cache_store.trace, 'can_load_from_key(k1);')

        cache_store.trace = ''
        self.assertEqual(cache.get_value('k5'), 'yyyy')
        self.assertEqual(cache.size, 600)
        self.assertEqual(
            cache_store.trace,
            'can_load_from_key(k5);load_from_key(k5);restore(k5, S/yyyy);')