v1.0.178: classify → subprocess.Popen (classify_worker.py). Изолированный процесс — свои коннекты к БД. HTTP-сервер продолжает отвечать.

This commit is contained in:
2026-06-25 13:14:39 +04:00
parent 88039fb750
commit aa1b801e94
2 changed files with 51 additions and 5 deletions
+33
View File
@@ -0,0 +1,33 @@
"""
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 <batch_id>", file=sys.stderr)
sys.exit(1)
batch_id = sys.argv[1]
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)