""" classify_worker.py — Фоновый процесс классификации (Фаза async classify). Запускается через subprocess.Popen из convert_server.py. Принимает batch_id как аргумент командной строки. Не зависит от HTTP-сервера — свои коннекты к БД, своя память. ЗАЧЕМ: threading.Thread внутри HTTP-процесса делит коннекты к БД с HTTP-потоком. При 50+ файлах ThreadPoolExecutor(4) + HTTP-поток исчерпывают пул коннектов → сервер не отвечает → 502. subprocess.Popen создаёт отдельный питон-процесс со своей памятью и своими коннектами. HTTP-сервер продолжает отвечать на batch-progress. Процесс живёт пока classify не завершится, потом умирает. """ import sys, os sys.path.insert(0, os.path.dirname(__file__)) from services.classify import classify_batch if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python3 classify_worker.py ", file=sys.stderr) sys.exit(1) batch_id = sys.argv[1] lock_path = f"/tmp/classify_{batch_id}.lock" try: result = classify_batch(batch_id) print(f"classify_worker DONE: {result}") except Exception as e: print(f"classify_worker FAILED: {e}", file=sys.stderr) sys.exit(1) finally: # Убрать lock-файл в любом случае if os.path.exists(lock_path): os.remove(lock_path)