"""Portable single-worker entry point: python -m src.serve --port 8000.""" import argparse import asyncio import os import uvicorn def main(): parser = argparse.ArgumentParser() parser.add_argument('--host', default='127.0.0.1') parser.add_argument('--port', default=8000, type=int) args = parser.parse_args() # psycopg 不支持 Windows ProactorEventLoop。直接运行 Server.serve # 使用已创建的 Selector loop,不被 uvicorn 默认 loop factory 覆盖。 factory = asyncio.SelectorEventLoop if os.name == 'nt' else None config = uvicorn.Config('src.main:app', host=args.host, port=args.port, loop='asyncio') with asyncio.Runner(loop_factory=factory) as runner: runner.run(uvicorn.Server(config).serve()) if __name__ == '__main__': main()