test/start.py

82 lines
2.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Qwen3-ASR server CLI entrypoint."""
import os
import sys
import multiprocessing as mp
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from dotenv import load_dotenv
load_dotenv()
os.environ.setdefault("TOKENIZERS_PARALLELISM", "false")
os.environ.setdefault("TQDM_DISABLE", "1")
os.environ.setdefault("DISABLE_TQDM", "1")
os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn")
def _disable_third_party_progress_bars() -> None:
try:
from transformers.utils import logging as transformers_logging
transformers_logging.disable_progress_bar()
transformers_logging.set_verbosity_error()
except Exception:
pass
def _configure_multiprocessing() -> None:
# vLLM launches EngineCore in a child process. CUDA cannot be re-initialized
# in a forked subprocess, so we must force spawn before importing the app.
current = mp.get_start_method(allow_none=True)
if current != "spawn":
mp.set_start_method("spawn", force=True)
def _run_server(workers: int) -> None:
from app.core.config import settings
import uvicorn
print(f"Qwen3-ASR | http://{settings.HOST}:{settings.PORT} | {settings.DEVICE}")
if workers == 1:
from app.bootstrap import run_cli_preflight
if not run_cli_preflight():
sys.exit(1)
elif workers > 1:
print(f"多Worker模式({workers}),启动前仅进行最小 preflight")
uvicorn.run(
"app.main:app",
host=settings.HOST,
port=settings.PORT,
workers=workers,
reload=settings.DEBUG if workers == 1 else False,
log_level="debug" if settings.DEBUG else settings.LOG_LEVEL.lower(),
access_log=True,
)
def main() -> None:
"""主入口"""
workers = int(os.getenv("WORKERS", "1"))
_disable_third_party_progress_bars()
_configure_multiprocessing()
try:
_run_server(workers)
except KeyboardInterrupt:
print("\n已停止")
sys.exit(0)
except Exception as e:
print(f"启动失败: {e}")
sys.exit(1)
if __name__ == "__main__":
main()