vanna_instance.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. """
  2. Vanna实例单例管理器
  3. 统一管理整个应用中的 Vanna 实例,确保真正的单例模式
  4. """
  5. import threading
  6. from typing import Optional
  7. from core.logging import get_app_logger
  8. # 初始化logger
  9. _logger = get_app_logger("VannaSingleton")
  10. # 全局变量
  11. _vanna_instance: Optional[object] = None
  12. _instance_lock = threading.Lock() # 线程安全锁
  13. def get_vanna_instance():
  14. """
  15. 获取Vanna实例(懒加载单例,线程安全)
  16. Returns:
  17. Vanna实例
  18. """
  19. global _vanna_instance
  20. # 双重检查锁定模式,确保线程安全和性能
  21. if _vanna_instance is None:
  22. with _instance_lock:
  23. if _vanna_instance is None:
  24. _logger.info("创建 Vanna 实例...")
  25. try:
  26. # 延迟导入,避免循环导入
  27. from core.vanna_llm_factory import create_vanna_instance
  28. _vanna_instance = create_vanna_instance()
  29. _logger.info("Vanna 实例创建成功")
  30. except Exception as e:
  31. _logger.error(f"Vanna 实例创建失败: {str(e)}")
  32. raise
  33. return _vanna_instance
  34. def reset_vanna_instance():
  35. """
  36. 重置Vanna实例(用于测试或配置更改后的重新初始化)
  37. """
  38. global _vanna_instance
  39. with _instance_lock:
  40. if _vanna_instance is not None:
  41. _logger.info("重置 Vanna 实例")
  42. _vanna_instance = None
  43. def get_instance_status() -> dict:
  44. """
  45. 获取实例状态信息(用于调试和健康检查)
  46. Returns:
  47. 包含实例状态的字典
  48. """
  49. global _vanna_instance
  50. return {
  51. "instance_created": _vanna_instance is not None,
  52. "instance_type": type(_vanna_instance).__name__ if _vanna_instance else None,
  53. "thread_safe": True
  54. }