feat: зеркало кода ВМ — deploy/ из contractor

This commit is contained in:
2026-06-27 19:35:53 +04:00
parent de074c8f99
commit 623cd9140f
30 changed files with 4805 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
"""
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]
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)