You've already forked FrameTour-RenderWorker
perf(cache): 优化缓存下载逻辑并添加性能指标追踪
- 实现了带等待时间统计的缓存锁获取功能 - 新增 get_or_download_with_metrics 方法返回详细的性能指标 - 在 tracing span 中记录锁等待时间、锁获取状态和缓存路径使用情况 - 优化缓存命中路径避免不必要的锁获取操作 - 添加了缓存文件就绪检查和复制功能的独立方法 - 增加了针对缓存锁超时但仍可使用就绪缓存的处理逻辑 - 新增了多个单元测试验证缓存锁定和指标报告功能
This commit is contained in:
@@ -682,10 +682,26 @@ class BaseHandler(TaskHandler, ABC):
|
||||
},
|
||||
) as span:
|
||||
try:
|
||||
lock_wait_ms = 0
|
||||
lock_acquired = False
|
||||
cache_path_used = "unknown"
|
||||
if use_cache:
|
||||
result = self.material_cache.get_or_download(url, dest, timeout=timeout)
|
||||
result, cache_metrics = self.material_cache.get_or_download_with_metrics(
|
||||
url,
|
||||
dest,
|
||||
timeout=timeout
|
||||
)
|
||||
lock_wait_ms = int(cache_metrics.get("lock_wait_ms", 0))
|
||||
lock_acquired = bool(cache_metrics.get("lock_acquired", False))
|
||||
cache_path_used = str(cache_metrics.get("cache_path_used", "unknown"))
|
||||
else:
|
||||
result = storage.download_file(url, dest, timeout=timeout)
|
||||
cache_path_used = "direct"
|
||||
|
||||
if span is not None:
|
||||
span.set_attribute("render.file.lock_wait_ms", lock_wait_ms)
|
||||
span.set_attribute("render.file.lock_acquired", lock_acquired)
|
||||
span.set_attribute("render.file.cache_path_used", cache_path_used)
|
||||
|
||||
if result:
|
||||
file_size = os.path.getsize(dest) if os.path.exists(dest) else 0
|
||||
|
||||
Reference in New Issue
Block a user