"""video-render FastAPI entry — health + lifespan (worker loop spawn).""" from __future__ import annotations import asyncio import logging from contextlib import asynccontextmanager from fastapi import FastAPI import worker logging.basicConfig(level=logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s") logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): worker_task = asyncio.create_task(worker.worker_loop()) logger.info("video-render lifespan 시작") try: yield finally: worker_task.cancel() try: await worker_task except asyncio.CancelledError: pass logger.info("video-render lifespan 종료") app = FastAPI(lifespan=lifespan) @app.get("/health") def health(): return {"ok": True, "service": "video-render"}