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