Fix worker startup via FastAPI lifespan, remove manual start from server script
This commit is contained in:
parent
a10cc19e61
commit
5e62b3d308
@ -1,6 +1,7 @@
|
|||||||
"""FastAPI backend для сервиса транскрибации."""
|
"""FastAPI backend для сервиса транскрибации."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
@ -18,17 +19,8 @@ from backend.queue import (
|
|||||||
get_processed_tree,
|
get_processed_tree,
|
||||||
read_file_content,
|
read_file_content,
|
||||||
set_progress_callback,
|
set_progress_callback,
|
||||||
)
|
start_workers,
|
||||||
|
stop_workers,
|
||||||
app = FastAPI(title="Transcription Service", version="1.0.0")
|
|
||||||
|
|
||||||
# CORS
|
|
||||||
app.add_middleware(
|
|
||||||
CORSMiddleware,
|
|
||||||
allow_origins=["*"],
|
|
||||||
allow_credentials=True,
|
|
||||||
allow_methods=["*"],
|
|
||||||
allow_headers=["*"],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# WebSocket менеджер
|
# WebSocket менеджер
|
||||||
@ -57,6 +49,32 @@ manager = ConnectionManager()
|
|||||||
set_progress_callback(manager.broadcast)
|
set_progress_callback(manager.broadcast)
|
||||||
|
|
||||||
|
|
||||||
|
@asynccontextmanager
|
||||||
|
async def lifespan(app: FastAPI):
|
||||||
|
"""Управление жизненным циклом приложения."""
|
||||||
|
print("🚀 Запуск рабочих процессов...")
|
||||||
|
start_workers(num_workers=1)
|
||||||
|
yield
|
||||||
|
print("🛑 Остановка рабочих процессов...")
|
||||||
|
stop_workers()
|
||||||
|
|
||||||
|
|
||||||
|
app = FastAPI(
|
||||||
|
title="Transcription Service",
|
||||||
|
version="1.0.0",
|
||||||
|
lifespan=lifespan,
|
||||||
|
)
|
||||||
|
|
||||||
|
# CORS
|
||||||
|
app.add_middleware(
|
||||||
|
CORSMiddleware,
|
||||||
|
allow_origins=["*"],
|
||||||
|
allow_credentials=True,
|
||||||
|
allow_methods=["*"],
|
||||||
|
allow_headers=["*"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# === API Endpoints ===
|
# === API Endpoints ===
|
||||||
|
|
||||||
@app.get("/", response_class=HTMLResponse)
|
@app.get("/", response_class=HTMLResponse)
|
||||||
|
|||||||
@ -138,23 +138,26 @@ _workers: List[asyncio.Task] = []
|
|||||||
|
|
||||||
async def _worker_loop():
|
async def _worker_loop():
|
||||||
"""Рабочий цикл обработки."""
|
"""Рабочий цикл обработки."""
|
||||||
|
print("[Worker] Рабочий процесс запущен и ждёт задачи...")
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
task_id, file_path = await _queue.get()
|
task_id, file_path = await _queue.get()
|
||||||
|
print(f"[Worker] Получена задача: {task_id}")
|
||||||
await process_file(file_path, task_id)
|
await process_file(file_path, task_id)
|
||||||
_queue.task_done()
|
_queue.task_done()
|
||||||
|
print(f"[Worker] Задача завершена: {task_id}")
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
|
print("[Worker] Остановка рабочего процесса")
|
||||||
break
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[Worker Error] {e}")
|
print(f"[Worker Error] {e}")
|
||||||
|
|
||||||
|
|
||||||
def start_workers(num_workers: int = 1):
|
def start_workers(num_workers: int = 1):
|
||||||
"""Запускает рабочих."""
|
"""Запускает рабочих в текущем event loop."""
|
||||||
global _workers
|
global _workers
|
||||||
loop = asyncio.get_event_loop()
|
|
||||||
for i in range(num_workers):
|
for i in range(num_workers):
|
||||||
task = loop.create_task(_worker_loop())
|
task = asyncio.create_task(_worker_loop())
|
||||||
_workers.append(task)
|
_workers.append(task)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -7,18 +7,13 @@ from pathlib import Path
|
|||||||
sys.path.insert(0, str(Path(__file__).parent))
|
sys.path.insert(0, str(Path(__file__).parent))
|
||||||
|
|
||||||
import uvicorn
|
import uvicorn
|
||||||
from backend.main import app
|
|
||||||
from backend.queue import start_workers
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("🚀 Запуск сервиса транскрибации...")
|
print("🚀 Запуск сервиса транскрибации...")
|
||||||
print("📡 Сервер: http://localhost:8000")
|
print("📡 Сервер: http://localhost:8000")
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
# Запускаем фоновых рабочих
|
# Запускаем сервер (рабочие запускаются через lifespan в backend/main.py)
|
||||||
start_workers(num_workers=1)
|
|
||||||
|
|
||||||
# Запускаем сервер
|
|
||||||
uvicorn.run(
|
uvicorn.run(
|
||||||
"backend.main:app",
|
"backend.main:app",
|
||||||
host="0.0.0.0",
|
host="0.0.0.0",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user