Сервис для хранения файлов аудио, индексации файлов, записи и выдачи результатов распознавания
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

143 lines
5.3 KiB

#!/usr/bin/env python3
"""
Пример использования параллельной отправки файлов на распознавание
"""
from autoLoader.loader import RecognitionChecker
from autoLoader.database import get_db_session, Audio
from autoLoader.config import GIGAAM_API_URL
import logging
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def example_parallel_send():
"""Пример параллельной отправки"""
print("🚀 Пример параллельной отправки файлов\n")
# Создаём checker с настройкой количества потоков
checker = RecognitionChecker(
api_url=GIGAAM_API_URL,
max_workers=10 # До 10 параллельных запросов
)
# Проверяем доступность API
if not checker.check_api_availability():
print("❌ GigaAM API недоступен")
return
# Проверяем БД
if not checker.check_database():
print("❌ База данных не готова")
return
# Получаем файлы без заключения
print("🔍 Поиск файлов без заключения...")
files_without_conclusion = checker.get_files_without_conclusion(limit=20)
if not files_without_conclusion:
print("✅ Все файлы уже обработаны")
return
print(f"📊 Найдено файлов: {len(files_without_conclusion)}\n")
# Отправляем параллельно
print("🚀 Начинаем параллельную отправку...\n")
results = checker.send_to_recognition_parallel(files_without_conclusion)
# Выводим результаты
print(f"\n{'='*60}")
print(f"📊 РЕЗУЛЬТАТЫ:")
print(f"{'='*60}")
print(f"Всего файлов: {results['total']}")
print(f"✅ Отправлено: {results['sent']}")
print(f"❌ Ошибок: {results['failed']}")
# Детали по каждому файлу
if results.get('files'):
print(f"\n📋 Детали:")
for file_result in results['files']:
status = "" if file_result['success'] else ""
print(f" {status} {file_result['filename']}")
print(f"{'='*60}\n")
def example_sequential_send():
"""Пример последовательной отправки (для сравнения)"""
print("📤 Пример последовательной отправки файлов\n")
checker = RecognitionChecker(api_url=GIGAAM_API_URL)
if not checker.check_api_availability():
print("❌ GigaAM API недоступен")
return
# Получаем файлы
files_without_conclusion = checker.get_files_without_conclusion(limit=5)
if not files_without_conclusion:
print("✅ Все файлы уже обработаны")
return
print(f"📊 Найдено файлов: {len(files_without_conclusion)}\n")
# Отправляем последовательно (parallel=False)
results = checker.process_all_pending(limit=5, parallel=False)
print(f"\n{'='*60}")
print(f"📊 РЕЗУЛЬТАТЫ:")
print(f"{'='*60}")
print(f"Всего файлов: {results['total']}")
print(f"✅ Отправлено: {results['sent']}")
print(f"❌ Ошибок: {results['failed']}")
print(f"{'='*60}\n")
def example_send_specific_files():
"""Пример отправки конкретных файлов"""
print("🎯 Пример отправки конкретных файлов\n")
checker = RecognitionChecker(max_workers=5)
# Получаем конкретные файлы из БД
with get_db_session() as db:
# Например, последние 10 файлов
audio_files = db.query(Audio).order_by(Audio.index_date.desc()).limit(10).all()
if not audio_files:
print(" Файлы не найдены")
return
print(f"📊 Выбрано файлов: {len(audio_files)}\n")
# Отправляем параллельно
results = checker.send_to_recognition_parallel(audio_files)
print(f"\n✅ Отправлено: {results['sent']} из {results['total']}\n")
if __name__ == "__main__":
import sys
# Выбор примера
if len(sys.argv) > 1:
example_type = sys.argv[1]
else:
print("Выберите пример:")
print(" python example_parallel_send.py parallel - Параллельная отправка")
print(" python example_parallel_send.py sequential - Последовательная отправка")
print(" python example_parallel_send.py specific - Отправка конкретных файлов")
print("\nИспользование по умолчанию: parallel\n")
example_type = "parallel"
if example_type == "parallel":
example_parallel_send()
elif example_type == "sequential":
example_sequential_send()
elif example_type == "specific":
example_send_specific_files()
else:
print(f"❌ Неизвестный пример: {example_type}")