vanna_instance.py 1.7 KB

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