horton_part.core.cache module
Avoid recomputation of earlier results and reallocation of existing arrays
In principle, the JustOnceClass
and the Cache
can be used
independently, but in some cases it makes a lot of sense to combine them.
See for example the density partitioning code in horton.part
.
- class Cache
Bases:
object
Object that stores previously computed results.
The cache behaves like a dictionary with some extra features that can be used to avoid recomputation or reallocation.
- __init__()
- clear(**kwargs)
Clear all items in the cache
Optional arguments:
- dealloc
When set to True, the items are really removed from memory.
- tags
Limit the items cleared to those who have at least one tag that matches one of the given tags. When this argument is used and it contains at least one tag, items with no tags are not cleared.
- clear_item(*key, **kwargs)
Clear a selected item from the cache
Optional arguments:
- dealloc
When set to True, the item is really removed from memory.
- dump(*args, **kwargs)
Store an object in the cache.
Arguments:
- key1 [, key2, …]
The positional arguments (except for the last) are used as a key for the object.
- value
The object to be stored.
Optional argument:
- tags
Tags to be associated with the object
- iteritems(tags=None)
Iterate over all valid items in the cache.
- iterkeys(tags=None)
Iterate over the keys of all valid items in the cache.
- itervalues(tags=None)
Iterate over the values of all valid items in the cache.
- load(*key, **kwargs)
Get a value from the cache
Arguments:
- key0 [key1 …]
All positional arguments are used as keys to identify the cached value.
Optional arguments:
- alloc
Parameters used to allocate a cached value if it is not present yet. This argument can take two forms. When integer or a tuple of integers is given, an array is allocated. Alternatively, a tuple may be given whose first element is a constructor, and further elements are arguments for that constructor.
- default
A default value that is returned when the key does not exist in the cache. This default value is not stored in the cache.
- tags
When alloc is used and a new object is thereby created or reused, it will get these tags. This argument is only allowed if the alloc argument is present. In case no new object is allocated, the given tags must match those already present.
The optional argument alloc and default are both meant to handle situations when the key has not associated value. Hence they can not be both present.
- class CacheItem(value, tags=None)
Bases:
object
A container for an object stored in a Cache instance
- __init__(value, tags=None)
Arguments:
- value
The object stored in this container
Optional arguments:
- tags
Tags to be associated with the object
- check_alloc(alloc)
- check_tags(tags)
- clear()
Mark the item as invalid and clear the contents of the object.
Returns: A boolean indicating that clearing was successful
- classmethod from_alloc(alloc, tags)
- property tags
- property valid
- property value
- class JustOnceClass
Bases:
object
Base class for classes with methods that should never be executed twice.
In typically applications, these methods get called many times, but only during the first call, an actual computation is carried out. This way, the caller can safely call a method, just to make sure that a required result is computed.
All methods in the subclasses that should have this feature, must be given the
just_once
decoratore, e.g.class Example(JustOnceClass): @just_once def do_something(): self.foo = self.bar
When all results are outdated, one can call the
clear
method to forget which methods were called already.- __init__()
- clear()
- just_once(fn)