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