add check dublicate, add balancer
This commit is contained in:
@@ -214,7 +214,8 @@ async def process_all_pending_audio(
|
|||||||
200 OK + {
|
200 OK + {
|
||||||
"started_count": 15,
|
"started_count": 15,
|
||||||
"pending_files": ["file1.wav", "file2.wav", ...],
|
"pending_files": ["file1.wav", "file2.wav", ...],
|
||||||
"total_pending": 50
|
"total_pending": 50,
|
||||||
|
"skipped_duplicates": 2
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
@@ -232,6 +233,7 @@ async def process_all_pending_audio(
|
|||||||
"started_count": 0,
|
"started_count": 0,
|
||||||
"pending_files": [],
|
"pending_files": [],
|
||||||
"total_pending": 0,
|
"total_pending": 0,
|
||||||
|
"skipped_duplicates": 0,
|
||||||
"message": "Нет файлов без AiConclusion"
|
"message": "Нет файлов без AiConclusion"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,6 +242,7 @@ async def process_all_pending_audio(
|
|||||||
# Добавляем задачи в фон
|
# Добавляем задачи в фон
|
||||||
started_count = 0
|
started_count = 0
|
||||||
pending_files = []
|
pending_files = []
|
||||||
|
skipped_duplicates = 0 # Счётчик дубликатов
|
||||||
|
|
||||||
for audio in pending_audio:
|
for audio in pending_audio:
|
||||||
# Проверяем, что файл существует
|
# Проверяем, что файл существует
|
||||||
@@ -248,25 +251,46 @@ async def process_all_pending_audio(
|
|||||||
logger.warning(f"⚠️ Файл не найден на диске: {audio.filename}")
|
logger.warning(f"⚠️ Файл не найден на диске: {audio.filename}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# ПРОВЕРКА НА ДУБЛИКАТЫ: Проверяем, не обрабатывается ли файл уже
|
||||||
|
import requests
|
||||||
|
try:
|
||||||
|
# Проверяем статус через GigaAM API
|
||||||
|
check_url = f"{os.getenv('GIGAAM_API_URL', 'http://gigaam_api:5001')}/api/call/check-status"
|
||||||
|
check_response = requests.post(
|
||||||
|
check_url,
|
||||||
|
json={"filename": audio.filename},
|
||||||
|
timeout=5
|
||||||
|
)
|
||||||
|
|
||||||
|
if check_response.status_code == 200:
|
||||||
|
check_data = check_response.json()
|
||||||
|
if check_data.get('in_queue', False):
|
||||||
|
logger.info(f"⏭️ Файл уже в очереди GigaAM: {audio.filename}")
|
||||||
|
skipped_duplicates += 1
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
# Если проверка упала - всё равно продолжаем
|
||||||
|
logger.debug(f"Не удалось проверить статус {audio.filename}: {e}")
|
||||||
|
|
||||||
# Добавляем в фон (асинхронно)
|
# Добавляем в фон (асинхронно)
|
||||||
# В FastAPI используем BackgroundTasks
|
|
||||||
# Но нужно создавать новую сессию для каждого таска
|
|
||||||
pending_files.append(audio.filename)
|
pending_files.append(audio.filename)
|
||||||
started_count += 1
|
started_count += 1
|
||||||
|
|
||||||
# Запускаем обработку в фоне
|
# Запускаем обработку в фоне
|
||||||
# Используем lambda для захвата audio_id
|
|
||||||
background_tasks.add_task(
|
background_tasks.add_task(
|
||||||
process_single_audio,
|
process_single_audio,
|
||||||
str(audio.id)
|
str(audio.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info(f"✅ Запущено распознавание для {started_count} файлов")
|
logger.info(f"✅ Запущено распознавание для {started_count} файлов")
|
||||||
|
if skipped_duplicates > 0:
|
||||||
|
logger.info(f"⏭️ Пропущено дубликатов: {skipped_duplicates}")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"started_count": started_count,
|
"started_count": started_count,
|
||||||
"pending_files": pending_files,
|
"pending_files": pending_files,
|
||||||
"total_pending": total_pending
|
"total_pending": total_pending,
|
||||||
|
"skipped_duplicates": skipped_duplicates
|
||||||
}
|
}
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user