vanna_instance.py 1.8 KB

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