From 66f50a80c6feeb3a294271b3f2259269f1a4086f Mon Sep 17 00:00:00 2001 From: imeepos Date: Fri, 18 Jul 2025 11:56:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3AI=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=B9=B6=E5=8F=91=E7=93=B6=E9=A2=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除VideoClassificationService中共享的GeminiService实例 - 改为在classify_video_with_gemini方法中为每个任务创建独立的GeminiService - 解决Arc>导致的串行处理瓶颈 - 实现真正的并发处理,提升AI分类性能 修复前:所有worker共享一个GeminiService实例,导致串行等待 修复后:每个worker使用独立的GeminiService实例,实现真正并发 --- .../business/services/video_classification_service.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/apps/desktop/src-tauri/src/business/services/video_classification_service.rs b/apps/desktop/src-tauri/src/business/services/video_classification_service.rs index c049fbc..1d2eb74 100644 --- a/apps/desktop/src-tauri/src/business/services/video_classification_service.rs +++ b/apps/desktop/src-tauri/src/business/services/video_classification_service.rs @@ -8,7 +8,6 @@ use crate::infrastructure::file_system::FileSystemService; use anyhow::{Result, anyhow}; use std::sync::Arc; use std::path::Path; -use tokio::sync::Mutex; use serde_json; /// AI视频分类业务服务 @@ -17,7 +16,7 @@ pub struct VideoClassificationService { video_repo: Arc, ai_classification_repo: Arc, material_repo: Arc, - gemini_service: Arc>, + gemini_config: Option, } impl VideoClassificationService { @@ -28,13 +27,11 @@ impl VideoClassificationService { material_repo: Arc, gemini_config: Option, ) -> Self { - let gemini_service = Arc::new(Mutex::new(GeminiService::new(gemini_config))); - Self { video_repo, ai_classification_repo, material_repo, - gemini_service, + gemini_config, } } @@ -239,7 +236,8 @@ impl VideoClassificationService { /// 使用Gemini进行视频分类 async fn classify_video_with_gemini(&self, task: &mut VideoClassificationTask, prompt: &str) -> Result { - let mut gemini_service = self.gemini_service.lock().await; + // 为每个任务创建独立的GeminiService实例,避免并发瓶颈 + let mut gemini_service = GeminiService::new(self.gemini_config.clone()); // 调用Gemini API进行分类 let (file_uri, raw_response) = gemini_service.classify_video(&task.video_file_path, prompt).await?;