This commit is contained in:
jinql
2025-09-05 23:09:25 +08:00
parent 407c803550
commit d6696ff765
7 changed files with 24 additions and 60 deletions

View File

@@ -344,7 +344,7 @@ class FaviconService:
with self._lock:
if entity.domain in self.domain_list:
self.domain_list.remove(entity.domain)
# 同时从两个队列中移元素(处理完成)
# 任务完成,从两个队列中移元素
self._queue_pull(True, self.icon_queue)
self._queue_pull(True, self.total_queue)
@@ -401,7 +401,8 @@ class FaviconService:
if _cached and not cached_icon:
# 缓存已过期,后台刷新缓存
logger.info(f"缓存已过期,加入后台队列刷新: {entity.domain}")
# 只增加总队列计数,不增加实时队列计数(后台任务)
# 开始图标处理,加入两个队列
self.icon_queue.put(entity.domain)
self.total_queue.put(entity.domain)
bg_tasks.add_task(self.get_icon_sync, entity, _cached)
@@ -415,31 +416,33 @@ class FaviconService:
if not is_sync:
# 返回默认图片并加入后台队列
logger.info(f"返回默认图片并加入后台队列: {entity.domain}")
# 只增加总队列计数,不增加实时队列计数(后台任务)
# 开始图标处理,加入两个队列
self.icon_queue.put(entity.domain)
self.total_queue.put(entity.domain)
bg_tasks.add_task(self.get_icon_sync, entity, _cached)
return self.get_default(0)
return self.get_default()
else:
# 没有缓存,实时处理,检查队列大小
queue_size = self.icon_queue.qsize()
if queue_size >= self.MAX_QUEUE_SIZE:
# 加入后台队列并返回默认图片
logger.info(f"队列大小({queue_size})>={self.MAX_QUEUE_SIZE},返回默认图片并加入后台队列: {entity.domain}")
# 只增加总队列计数,不增加实时队列计数(后台任务)
# 开始图标处理,加入两个队列
self.icon_queue.put(entity.domain)
self.total_queue.put(entity.domain)
bg_tasks.add_task(self.get_icon_sync, entity, _cached)
return self.get_default(0)
return self.get_default()
else:
# 队列<MAX_QUEUE_SIZE实时处理
logger.info(f"队列大小({queue_size})<{self.MAX_QUEUE_SIZE},实时处理: {entity.domain}")
# 同时增加两个队列计数(实时处理任务)
# 开始图标处理,加入两个队列
self.icon_queue.put(entity.domain)
self.total_queue.put(entity.domain)
icon_content = self.get_icon_sync(entity, _cached)
if not icon_content:
# 获取失败,返回默认图标,不缓存
return self.get_default(0)
return self.get_default()
# 确定内容类型和缓存时间
content_type = filetype.guess_mime(icon_content) if icon_content else ""
@@ -451,7 +454,7 @@ class FaviconService:
except Exception as e:
logger.error(f"处理图标请求时发生错误 {url}: {e}")
# 返回默认图标
return self.get_default(0)
return self.get_default()
def get_header(self, content_type: str, cache_time: int = None) -> dict:
return self._get_header(content_type, cache_time)