index.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import asyncio
  2. import sys
  3. import uvicorn
  4. import signal
  5. from sqlalchemy.dialects import *
  6. from api import *
  7. from sockets.socket_server import *
  8. import uvicorn.loops.auto
  9. import uvicorn.protocols.http.auto
  10. import uvicorn.protocols.websockets.auto
  11. import uvicorn.lifespan.on
  12. from multiprocessing import Process, freeze_support
  13. from service.init_load_source import init_load_source
  14. def handle_shutdown(signum, frame):
  15. """关闭系统应用服务"""
  16. # 终止事件循环
  17. loop = asyncio.get_event_loop()
  18. loop.call_soon_threadsafe(loop.stop)
  19. sys.exit(0)
  20. async def run_server():
  21. # 启动uvicorn服务器
  22. isDebug = True if IS_DEBUG == "true" else False
  23. config = uvicorn.Config(
  24. APP_RUN,
  25. host=APP_HOST,
  26. port=int(PORT),
  27. reload=isDebug,
  28. workers=int(APP_WORKS),
  29. loop="auto",
  30. )
  31. server = uvicorn.Server(config)
  32. await server.serve()
  33. async def main():
  34. # await init_load_source().load_source()
  35. # await run_server()
  36. await asyncio.gather(run_server(), init_load_source().load_source())
  37. if __name__ == "__main__":
  38. if sys.platform == "win32":
  39. asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
  40. signal.signal(signal.SIGINT, handle_shutdown)
  41. signal.signal(signal.SIGTERM, handle_shutdown)
  42. print("python server is running at port:", PORT)
  43. print("python server is running at port:", APP_RUN)
  44. loop = asyncio.new_event_loop()
  45. try:
  46. loop.run_until_complete(main())
  47. finally:
  48. loop.close()
  49. # isDebug = True if IS_DEBUG == "true" else False
  50. # uvicorn.run(
  51. # app=APP_RUN,
  52. # host=APP_HOST,
  53. # port=int(PORT),
  54. # reload=isDebug,
  55. # loop="auto",
  56. # )