【发布时间】:2020-10-13 22:25:50
【问题描述】:
我正在尝试将 fastapi 与 gremlin-python 一起使用。该库使用 tornado 作为连接到 gremlin 服务器的传输,特别是它使用 httpclient 和 websockets 以及 tornado 的ioloop。
问题是 python 禁止嵌套事件循环,我得到运行时错误:https://pastebin.com/mcFhuKks 目前作为解决方法我使用nest_asyncio,但这是一个非常不可靠的解决方案。
由于之前我在这里看到了几个关于 asyncio 循环的问题(尽管主要是关于 aiohttp),我很好奇是否有一些简单的方法可以解决这个问题(例如,以某种方式重用父事件循环)。
我还想注意到 gremlin-python DB 连接构造函数支持传递自定义传输工厂(而不是 default),我尝试使用 asyncio.get_event_loop() 和 asyncio.run_until_complete() 之类的东西而不是 tornado 的替代方案,但是没有运气。
因此,我在这里寻求任何想法或可能的解决方案。
- FastAPI 版本:==0.61.1
- Python 版本:python:3.8-slim
【问题讨论】:
-
这可能由于初始化顺序而发生,因此 gremlin-client 和 tornado 创建自己的循环而不是使用已经创建的循环。如果您提供了mwe,建议解决方案会容易得多。
标签: python python-asyncio tornado fastapi gremlinpython