修复: 全局参数线程安全 + copy保护 + 回调只清除受影响算法缓存
This commit is contained in:
@@ -2098,7 +2098,8 @@ class AlgorithmManager:
|
|||||||
|
|
||||||
algo_params = self.default_params.get(algorithm_type, {}).copy()
|
algo_params = self.default_params.get(algorithm_type, {}).copy()
|
||||||
# 三级合并:默认参数 → 全局参数 → 绑定级参数
|
# 三级合并:默认参数 → 全局参数 → 绑定级参数
|
||||||
global_p = self._global_params.get(algorithm_type, {})
|
with self._update_lock:
|
||||||
|
global_p = self._global_params.get(algorithm_type, {}).copy()
|
||||||
if global_p:
|
if global_p:
|
||||||
algo_params.update(global_p)
|
algo_params.update(global_p)
|
||||||
if params:
|
if params:
|
||||||
|
|||||||
9
main.py
9
main.py
@@ -137,9 +137,12 @@ class EdgeInferenceService:
|
|||||||
if self._algorithm_manager:
|
if self._algorithm_manager:
|
||||||
global_params = data.get("global_params", {})
|
global_params = data.get("global_params", {})
|
||||||
self._algorithm_manager.update_global_params(global_params)
|
self._algorithm_manager.update_global_params(global_params)
|
||||||
# 全局参数变更后需要清除注册缓存,使下一帧重新注册算法以应用新参数
|
# 只清除受影响算法的注册缓存,避免无关算法状态丢失
|
||||||
self._algorithm_manager._registered_keys.clear()
|
affected_algos = set(global_params.keys())
|
||||||
self._logger.info(f"全局参数回调已触发,已清除算法注册缓存")
|
keys_to_remove = [k for k in self._algorithm_manager._registered_keys if k[2] in affected_algos]
|
||||||
|
for key in keys_to_remove:
|
||||||
|
self._algorithm_manager._registered_keys.discard(key)
|
||||||
|
self._logger.info(f"全局参数回调已触发,清除 {len(keys_to_remove)} 个受影响算法的注册缓存")
|
||||||
self._config_manager.register_callback("global_params_update", _on_global_params_update)
|
self._config_manager.register_callback("global_params_update", _on_global_params_update)
|
||||||
self._logger.info("配置管理器初始化成功")
|
self._logger.info("配置管理器初始化成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user