[view] fix: random segmentation fault errors caused by the cache cleaner thread

This commit is contained in:
Vinicius Moreira
2023-12-20 08:17:29 -03:00
parent a084d8bf31
commit 78618eb70c
3 changed files with 13 additions and 44 deletions

View File

@@ -1,6 +1,5 @@
import datetime
import time
from threading import Lock, Thread
from threading import Lock
from typing import Optional
from bauh.api.abstract.cache import MemoryCache, MemoryCacheFactory
@@ -76,41 +75,14 @@ class DefaultMemoryCache(MemoryCache):
self.get(key)
class CacheCleaner(Thread):
def __init__(self, check_interval: int = 15):
super(CacheCleaner, self).__init__(daemon=True)
self.caches = []
self.check_interval = check_interval
def register(self, cache: MemoryCache):
if cache.is_enabled():
self.caches.append(cache)
def run(self):
if self.caches:
while True:
for cache in self.caches:
cache.clean_expired()
time.sleep(self.check_interval)
class DefaultMemoryCacheFactory(MemoryCacheFactory):
def __init__(self, expiration_time: int, cleaner: CacheCleaner = None):
def __init__(self, expiration_time: int):
"""
:param expiration_time: default expiration time for all instantiated caches
:param cleaner
"""
super(DefaultMemoryCacheFactory, self).__init__()
self.expiration_time = expiration_time
self.cleaner = cleaner
def new(self, expiration: Optional[int] = None) -> MemoryCache:
instance = DefaultMemoryCache(expiration if expiration is not None else self.expiration_time)
if self.cleaner:
self.cleaner.register(instance)
return instance
return DefaultMemoryCache(expiration if expiration is not None else self.expiration_time)