runner.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. """
  2. 服务器运行器:整合所有组件并启动 uvicorn。
  3. """
  4. import uvicorn
  5. from foundation.observability.logger.loggering import server_logger
  6. from server.signals import setup_signal_handlers
  7. class ServerRunner:
  8. """服务器运行器。"""
  9. def __init__(self, app_factory):
  10. self.app_factory = app_factory
  11. self.celery_manager = app_factory.celery_manager
  12. def run_server(self, **kwargs):
  13. config = self.app_factory.create_server_config()
  14. config.update(kwargs)
  15. host = config.get('host', '0.0.0.0')
  16. port = int(config.get('port', 8002))
  17. reload = config.get('reload', False)
  18. with_celery = config.get('with_celery', True)
  19. if with_celery:
  20. self.celery_manager.start_worker()
  21. setup_signal_handlers(lambda: self.celery_manager.stop_worker_immediately())
  22. app = self.app_factory.create_app()
  23. try:
  24. if reload:
  25. uvicorn.run("server.app:app", host=host, port=port, reload=reload)
  26. else:
  27. uvicorn.run(app, host=host, port=port)
  28. finally:
  29. if with_celery:
  30. self.celery_manager.stop_worker()