From 949e4dea9e9e7c8873e9eb66a1131ff6c1b189b4 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Thu, 15 May 2025 21:22:41 +0800 Subject: [PATCH] perf: Refine the Model Manager code (#3089) --- apps/common/config/embedding_config.py | 33 +++++++++++++------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/apps/common/config/embedding_config.py b/apps/common/config/embedding_config.py index a6e9ab9aa..d360221c0 100644 --- a/apps/common/config/embedding_config.py +++ b/apps/common/config/embedding_config.py @@ -11,7 +11,7 @@ import time from common.cache.mem_cache import MemCache -lock = threading.Lock() +_lock = threading.Lock() class ModelManage: @@ -20,26 +20,27 @@ class ModelManage: @staticmethod def get_model(_id, get_model): - # 获取锁 - lock.acquire() - try: - model_instance = ModelManage.cache.get(_id) - if model_instance is None or not model_instance.is_cache_model(): + model_instance = ModelManage.cache.get(_id) + if model_instance is None: + with _lock: model_instance = get_model(_id) - ModelManage.cache.set(_id, model_instance, timeout=60 * 30) + ModelManage.cache.set(_id, model_instance, timeout=60 * 60 * 8) + ModelManage.clear_timeout_cache() + return model_instance + else: + if model_instance.is_cache_model(): + ModelManage.cache.touch(_id, timeout=60 * 60 * 8) + return model_instance + else: + model_instance = get_model(_id) + ModelManage.cache.set(_id, model_instance, timeout=60 * 60 * 8) return model_instance - # 续期 - ModelManage.cache.touch(_id, timeout=60 * 30) - ModelManage.clear_timeout_cache() - return model_instance - finally: - # 释放锁 - lock.release() @staticmethod def clear_timeout_cache(): - if time.time() - ModelManage.up_clear_time > 60: - ModelManage.cache.clear_timeout_data() + if time.time() - ModelManage.up_clear_time > 60 * 60: + threading.Thread(target=lambda: ModelManage.cache.clear_timeout_data()).start() + ModelManage.up_clear_time = time.time() @staticmethod def delete_key(_id):