【发布时间】:2022-12-19 19:04:56
【问题描述】:
我在使用 uvicorn (fastapi) 运行我自己的异步函数时遇到了一些问题
我的目标是能够运行 queue manager 函数,以及 uvicorn webapp。但是,我的start 函数似乎阻止了uvicorn.run 代码的运行。
async def queue_manager(self):
while True:
job = await self.queue.get()
print(job)
await asyncio.sleep(2)
async def start():
task1 = asyncio.create_task(queue_manager())
await asyncio.gather(task1)
app = FastAPI()
app.include_router(server.router)
if __name__ == "__main__":
asyncio.run(start())
uvicorn.run("main:app", host="0.0.0.0", port=5959)
为了解决这个问题,我尝试在我的start 函数中运行uvicorn.run,但这会导致以下错误:
line 35, in <module>
asyncio.run(start())
line 17, in start
await uvicorn.run("main:app", host="0.0.0.0", port=5959)
RuntimeError: asyncio.run() cannot be called from a running event loop
async def start():
task1 = asyncio.create_task(custom_instance_manager.queue_manager())
task2 = asyncio.create_task(uvicorn.run(
"main:app", host="0.0.0.0", port=5959))
await asyncio.gather(task1, task2)
if __name__ == "__main__":
asyncio.run(start())
【问题讨论】:
标签: python python-asyncio fastapi uvicorn