summaryrefslogtreecommitdiffstats
path: root/glances/globals.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/globals.py')
-rw-r--r--glances/globals.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/glances/globals.py b/glances/globals.py
index ccf3f5be..46f47f7b 100644
--- a/glances/globals.py
+++ b/glances/globals.py
@@ -25,6 +25,8 @@ import subprocess
from datetime import datetime
import re
import base64
+import functools
+import weakref
import queue
from configparser import ConfigParser, NoOptionError, NoSectionError
@@ -406,3 +408,21 @@ def folder_size(path, errno=0):
except OSError as e:
ret_err = e.errno
return ret_size, ret_err
+
+
+def weak_lru_cache(maxsize=128, typed=False):
+ """LRU Cache decorator that keeps a weak reference to self
+ Source: https://stackoverflow.com/a/55990799"""
+ def wrapper(func):
+
+ @functools.lru_cache(maxsize, typed)
+ def _func(_self, *args, **kwargs):
+ return func(_self(), *args, **kwargs)
+
+ @functools.wraps(func)
+ def inner(self, *args, **kwargs):
+ return _func(weakref.ref(self), *args, **kwargs)
+
+ return inner
+
+ return wrapper