#!/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}")