main.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import argparse
  2. import asyncio
  3. import signal
  4. import uvicorn
  5. import sys
  6. from api import *
  7. import uvicorn
  8. import configparser, json
  9. SHUTDOWN_TIMEOUT = 10
  10. # ===============默认数据配置=====================
  11. config = configparser.ConfigParser()
  12. config_name = "config.ini"
  13. config.read(config_name)
  14. # argparse
  15. parser = argparse.ArgumentParser(description="Process some integers.")
  16. parser.add_argument("--port", type=int, default=7074, help="The port number.")
  17. args = parser.parse_args()
  18. server = uvicorn.Server(uvicorn.Config(app))
  19. # 通过信号来退出服务,否则会出现终端显示退出后,实际进程仍在运行
  20. # 定义信号处理函数
  21. def signal_handler(sig, frame):
  22. print("[python] [flask] Received signal to terminate the server:", sig)
  23. sys.exit(0)
  24. @app.on_event("shutdown")
  25. async def shutdown():
  26. server.should_exit = True
  27. await asyncio.sleep(3)
  28. async def force_shutdown():
  29. await asyncio.sleep(SHUTDOWN_TIMEOUT)
  30. if not server.should_exit:
  31. server.force_exit = True
  32. if __name__ == "__main__":
  33. # 以api方式启动服务会出现警告,请忽略
  34. # app.run(port=args.port,use_reloader=True)
  35. host = config.get("app", "host")
  36. port = config.get("app", "port")
  37. debug = config.get("app", "debug")
  38. server.install_signal_handlers()
  39. asyncio.ensure_future(force_shutdown())
  40. uvicorn.run(
  41. app="main:app",
  42. host=host,
  43. port=int(port),
  44. reload=bool(debug),
  45. )
  46. # 注册信号处理函数
  47. # 或许flask内置的stdio与node.js stdio有冲突,导致控制台无法显示信息。
  48. # 如果想要查看控制台输出,请单独启动服务 npm run dev-python
  49. print("python server is running at port:", port)