0

我想将在 Uvicorn 服务器启动期间创建的对象传递给由该 uvicorn 实例(FastApi/Starlette)运行的应用程序。一开始,我准备了继承Uvicorn服务器的类:

class ActionServer(uvicorn.Server):
    def __init__(self, config, pipes: dict):
        self.pipes = pipes
        super(ActionServer, self).__init__(config)

然后我以编程方式启动服务器:

def run(pipes: dict):        
    config = Config(app="app.main:app", loop="asyncio", host=API_LISTEN_IP, port=API_LISTEN_PORT, reload=True, reload_dirs=['app'])
    server = ActionServer(config, pipes)    
    server.run()

我的应用程序类也继承自 FastApi:

class ActionFastApi(FastAPI):
    def __init__(self):
        self.pipes = None
        super().__init__()

但我不知道如何将管道实例从 Uvicorn 传递到应用程序。在 Uvicorn 实例中,我尝试制作如下内容:

self.config.loaded_app.app.pipes = self.pipes

但是在init ()、run() 或 serve() 方法中,loaded_app 仍然不存在。这里方法执行的顺序:

Server __init__()
Server run()
Server serve()
App __init__()

加载应用程序时,Uvicorn 内部是否会引发任何事件?或者也许 App 可以访问它正在运行的服务器实例?我无法在文档中找到此信息。

4

0 回答 0