fastapi 添加 eureka 报错:RuntimeError: 不能在另一个循环运行时运行事件循环
我的项目结构如下:
我想在我的 FastAPI 应用中添加 Eureka,我正在尝试在 init.py 文件中做到这一点:
import py_eureka_client.eureka_client as eureka_client
from fastapi import FastAPI
app = FastAPI()
eureka_client.init(eureka_server="http://eureka-primary:8011/eureka/,http://eureka-secondary:8012/eureka/,http://eureka-tertiary:8013/eureka/",
app_name="your_app_name",
instance_port=8000)
我还使用 uvicorn 来运行这个应用,命令是这样的:
uvicorn landus.main:app --reload
但是我遇到了这个错误:
RuntimeError: Cannot run the event loop while another loop is running
我看到了一些链接,比如这个 https://github.com/keijack/python-eureka-client/issues/76,但是我不太明白它是怎么工作的。我只知道 FastAPI 或 uvicorn 是异步应用,而当我添加 Eureka 这个也是异步应用时,就出现了这个错误,但我不知道该怎么让它正常工作。
1 个回答
0
我通过执行init_async函数,并使用FastAPI中的asynccontextmanager,让它正常工作了:
import py_eureka_client.eureka_client as eureka_client
from fastapi import FastAPI
from contextlib import asynccontextmanager
from landus.controladores import controladorRouter
@asynccontextmanager
async def lifespan(app: FastAPI):
await eureka_client.init_async(
eureka_server="http://eureka-primary:8011/eureka/,http://eureka-secondary:8012/eureka/,http://eureka-tertiary:8013/eureka/",
app_name="msprueba",
instance_port=8000,
instance_host="localhost"
)
yield
app = FastAPI(lifespan=lifespan)
app.include_router(controladorRouter)
问题在于,我不能在FastAPI中执行一个也是异步的代码,所以生命周期函数在FastAPI运行之前就执行了。