pool models, parallel workers
This commit is contained in:
Executable
+143
@@ -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}")
|
||||
Reference in New Issue
Block a user