pymor.core.cache¶
This module provides the caching facilities of pyMOR.
Any class that wishes to provide cached method calls should derive from
CacheableObject. Methods which are to be cached can then
be marked using the cached decorator.
To ensure consistency, CacheableObject derives from
ImmutableObject: The return value of a cached method call should
only depend on its arguments as well as the immutable state of the class
instance.
Making this assumption, the keys for cache lookup are created from the following data:
the instance’s
cache_idin case of apersistentCacheRegion, else the instance’suid,the method’s
__name__,the method’s arguments.
Note that instances of ImmutableObject are allowed to have mutable
private attributes. It is the implementer’s responsibility not to break things.
(See this warning.)
Backends for storage of cached return values derive from CacheRegion.
Currently two backends are provided for memory-based and disk-based caching
(MemoryRegion and DiskRegion). The available regions
are stored in the module level cache_regions dict. The user can add
additional regions (e.g. multiple disk cache regions) as required.
CacheableObject.cache_region specifies a key of the cache_regions dict
to select a cache region which should be used by the instance.
(Setting cache_region to None or 'none' disables caching.)
By default, a ‘memory’, a ‘disk’ and a ‘persistent’ cache region are configured. The
paths and maximum sizes of the disk regions, as well as the maximum number of keys of
the memory cache region can be configured via the
pymor.core.cache.default_regions.disk_path,
pymor.core.cache.default_regions.disk_max_size,
pymor.core.cache.default_regions.persistent_path,
pymor.core.cache.default_regions.persistent_max_size and
pymor.core.cache.default_regions.memory_max_keys defaults.
There two ways to disable and enable caching in pyMOR:
Calling
disable_caching(enable_caching), to disable (enable) caching globally.Calling
CacheableObject.disable_caching(CacheableObject.enable_caching) to disable (enable) caching for a given instance.
Caching of a method is only active if caching has been enabled both globally
(enabled by default) and on instance level. For debugging purposes, it is moreover
possible to set the environment variable PYMOR_CACHE_DISABLE=1 which overrides
any call to enable_caching.
A cache region can be emptied using CacheRegion.clear. The function
clear_caches clears each cache region registered in cache_regions.
Module Contents¶
- class pymor.core.cache.CacheRegion[source]¶
Base class for all pyMOR cache regions.
Methods
Clear the entire cache region.
Return cache entry for given key.
Set cache entry for
keyto givenvalue.
- class pymor.core.cache.CacheableObject[source]¶
Bases:
pymor.core.base.ImmutableObjectBase class for anything that wants to use our built-in caching.
- cache_region[source]¶
Name of the
CacheRegionto use. Must correspond to a key in thecache_regionsdict. IfNoneor'none', caching is disabled.
Methods
Call a given
methodand cache the return value.Disable caching for this instance.
Enable caching for this instance.
Retrieve value from cache.
Store value in active
CacheRegion.- cached_method_call(method, *args, **kwargs)[source]¶
Call a given
methodand cache the return value.This method can be used as an alternative to the
cacheddecorator.- Parameters:
method – The method that is to be called. This has to be a method of
self.args – Positional arguments for
method.kwargs – Keyword arguments for
method
- Returns:
The (possibly cached) return value of
method(*args, **kwargs).
- enable_caching(region, cache_id=None)[source]¶
Enable caching for this instance.
Warning
Note that using
with_will resetcache_regionandcache_idto their class defaults.- Parameters:
region – Name of the
CacheRegionto use. Must correspond to a key in thecache_regionsdict. IfNoneor'none', caching is disabled.cache_id – Identifier for the object instance on which a cached method is called. Must be specified when
regionispersistent. Whenregionis notpersistentand nocache_idis given, the object’suidis used instead.
- get_cached_value(key_data, value_factory=None)[source]¶
Retrieve value from cache.
This low-level method allows retrieving cached values for pairs
(self, key_data)from the object’s activeCacheRegion.If the corresponding value is not found in the cache,
value_factoryis called to compute the value. The value is then stored in theCacheRegionand returned. Ifvalue_factoryisNone, aKeyErroris raised.In most cases, the
cacheddecorator should be used instead.- Parameters:
key_data – The data/parameters from which the cache key is computed that is used to retrieve the value.
value_factory – A callable with no parameters that computes the desired value in case of a cache miss.
- Returns:
The cached value corresponding to the pair
(self, key).
- set_cached_value(key_data, value)[source]¶
Store value in active
CacheRegion.This low-level method allows storing values for pairs
(self, key)in the object’s activeCacheRegionfor later retrieval.In most cases, the
cacheddecorator should be used instead.- Parameters:
key_data – The data/parameters from which the cache key is computed that is used to store the value.
value – Value to be stored.
- class pymor.core.cache.DiskRegion(path, max_size, persistent)[source]¶
Bases:
CacheRegionBase class for all pyMOR cache regions.
Methods
Clear the entire cache region.
Return cache entry for given key.
Set cache entry for
keyto givenvalue.
- class pymor.core.cache.MemoryRegion(max_keys)[source]¶
Bases:
CacheRegionBase class for all pyMOR cache regions.
Methods
Clear the entire cache region.
Return cache entry for given key.
Set cache entry for
keyto givenvalue.
- pymor.core.cache.cached(function: F) F[source]¶
Decorator to make a method of
CacheableObjectactually cached.