diff --git a/example_parallel_send.py b/example_parallel_send.py new file mode 100755 index 0000000..0c29b16 --- /dev/null +++ b/example_parallel_send.py @@ -0,0 +1,143 @@ +#!/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}")