24 lines
802 B
Python
24 lines
802 B
Python
"""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()
|