model_cleanup_hook.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. """
  2. Model Cleanup Hook - 轻量级模型清理事件采集 hook
  3. 该模块提供与 fileLoc 侧 model cleanup 事件收集的接口。
  4. 当 fileLoc 未安装时,该模块为空操作,不影响主流程。
  5. 被 BaseAdapter.cleanup() (通过 monkey patch 拦截) 调用,侵入量:2行。
  6. """
  7. import threading
  8. from datetime import datetime
  9. from typing import Dict, Any, List, Optional
  10. # 线程安全存储
  11. _cleanup_events: List[Dict[str, Any]] = []
  12. _cleanup_lock = threading.Lock()
  13. def on_cleanup(adapter_name: str, model_name: str, cleanup_type: str) -> None:
  14. """
  15. 模型清理回调 - 被 BaseAdapter.cleanup() 调用
  16. Args:
  17. adapter_name: 适配器名称 (如 "MinerUAdapter")
  18. model_name: 模型名称 (如 "layout_detector")
  19. cleanup_type: 清理类型 ("start" 或 "end")
  20. """
  21. if not adapter_name or not model_name:
  22. return
  23. if cleanup_type not in ("start", "end"):
  24. return
  25. event = {
  26. 'adapter_name': adapter_name,
  27. 'model_name': model_name,
  28. 'cleanup_type': cleanup_type,
  29. 'timestamp': datetime.now().isoformat()
  30. }
  31. with _cleanup_lock:
  32. _cleanup_events.append(event)
  33. def get_cleanup_events() -> List[Dict[str, Any]]:
  34. """
  35. 获取所有清理事件 (供 fileLoc 调用)
  36. Returns:
  37. 清理事件列表
  38. """
  39. with _cleanup_lock:
  40. return list(_cleanup_events)
  41. def clear_cleanup_events() -> None:
  42. """清除所有清理事件"""
  43. with _cleanup_lock:
  44. _cleanup_events.clear()