| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- """
- 服务器运行器:整合所有组件并启动 uvicorn。
- """
- import atexit
- import uvicorn
- from foundation.observability.logger.loggering import server_logger
- from server.signals import setup_signal_handlers
- class ServerRunner:
- """服务器运行器。"""
- def __init__(self, app_factory):
- self.app_factory = app_factory
- self.celery_manager = app_factory.celery_manager
- def run_server(self, **kwargs):
- config = self.app_factory.create_server_config()
- config.update(kwargs)
- host = config.get('host', '0.0.0.0')
- port = int(config.get('port', 8002))
- reload = config.get('reload', False)
- with_celery = config.get('with_celery', True)
- if with_celery:
- self.celery_manager.start_worker()
- atexit.register(self.celery_manager.stop_worker_immediately)
- setup_signal_handlers(lambda: self.celery_manager.stop_worker_immediately())
- app = self.app_factory.create_app()
- try:
- if reload:
- uvicorn.run("server.app:app", host=host, port=port, reload=reload)
- else:
- uvicorn.run(app, host=host, port=port)
- finally:
- if with_celery:
- self.celery_manager.stop_worker()
|