fix: 添加延迟确保批量 Deep Scan 严格限制并发为 2

问题:
- re_scan_file API 是异步的,立即返回成功
- 后端可能同时启动多个扫描任务
- 导致有 4 个文件同时在 scanning 状态

临时修复:
- 在每个文件启动扫描后等待 2 秒
- 确保后端有足够时间开始处理并释放资源
- 保持前端并发控制为 2,避免过多任务同时启动

未来改进:
- 需要在后端实现真正的队列机制
- 或者检查当前 scanning 状态,动态调整启动速度
This commit is contained in:
2026-10-08 01:37:35 +08:00
parent 4e1df67857
commit e83d5c7a8c

View File

@@ -1899,54 +1899,57 @@ async function batchDeepScan() {
actionMsg.value = `Starting: ${immediateCount} immediate, ${queueTotal} queuing...`
const tasks = filesToProcess.map((f) => {
return limit(async () => {
const fileUuid = f.file_uuid
if (!fileUuid) {
async function processFile(f: any) {
const fileUuid = f.file_uuid
if (!fileUuid) {
failCount++
return
}
processing++
const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing)
if (queueCount > 0) {
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...`
} else {
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...`
}
try {
const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid)
if (!file) {
failCount++
processing--
return
}
processing++
const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing)
const result: any = await apiCall('re_scan_file', {
fileUuid: fileUuid,
autoPipeline: true
})
if (queueCount > 0) {
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...`
if (result.success) {
successCount++
if (file) {
file.status = 'scanning'
fileStatusCache.value[fileUuid] = 'scanning'
await syncFileStatus(fileUuid)
}
// 等待 2 秒,确保后端开始处理并释放资源
await new Promise(resolve => setTimeout(resolve, 2000))
} else {
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...`
}
try {
const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid)
if (!file) {
failCount++
processing--
return
}
const result: any = await apiCall('re_scan_file', {
fileUuid: fileUuid,
autoPipeline: true
})
if (result.success) {
successCount++
if (file) {
file.status = 'scanning'
fileStatusCache.value[fileUuid] = 'scanning'
await syncFileStatus(fileUuid)
}
} else {
failCount++
}
} catch (e: any) {
failCount++
console.error('[batchDeepScan] Failed:', f.file_name, e)
} finally {
processing--
}
})
})
} catch (e: any) {
failCount++
console.error('[batchDeepScan] Failed:', f.file_name, e)
} finally {
processing--
}
}
const tasks = filesToProcess.map((f) => limit(() => processFile(f)))
await Promise.all(tasks)