mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-19 12:24:32 +00:00
Utils.misc: Added memoised function decorator
This allows the return value of a function to be cached so that when it is called in the future the function does not need to run. Borrowed from: https://github.com/ARM-software/devlib
This commit is contained in:
parent
c207a34872
commit
c423a8b4bc
@ -823,3 +823,21 @@ def sha256(path, chunk=2048):
|
|||||||
|
|
||||||
def urljoin(*parts):
|
def urljoin(*parts):
|
||||||
return '/'.join(p.rstrip('/') for p in parts)
|
return '/'.join(p.rstrip('/') for p in parts)
|
||||||
|
|
||||||
|
|
||||||
|
__memo_cache = {}
|
||||||
|
|
||||||
|
|
||||||
|
def memoized(func):
|
||||||
|
"""A decorator for memoizing functions and methods."""
|
||||||
|
func_id = repr(func)
|
||||||
|
|
||||||
|
def memoize_wrapper(*args, **kwargs):
|
||||||
|
id_string = func_id + ','.join([str(id(a)) for a in args])
|
||||||
|
id_string += ','.join('{}={}'.format(k, v)
|
||||||
|
for k, v in kwargs.iteritems())
|
||||||
|
if id_string not in __memo_cache:
|
||||||
|
__memo_cache[id_string] = func(*args, **kwargs)
|
||||||
|
return __memo_cache[id_string]
|
||||||
|
|
||||||
|
return memoize_wrapper
|
||||||
|
Loading…
x
Reference in New Issue
Block a user