#!/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()