Есть ли способ использовать Gremlin в приложении asyncio Python?
Документация TinkerPop описывает GLV для Python. Однако представленные здесь примеры построены на синхронном коде. Существует библиотека aiogremlin, которая была разработана для использования Gremlin в asyncio-коде Python. К сожалению, проект, похоже, прекращен.
Поддерживает ли официальный GLV asyncio или есть способ использовать Gremlin в асинхронных приложениях Python?
2 ответа
Я заметил, что этот вопрос остался без ответа, так что поехали ...
Сегодня клиент Gremlin Python использует Tornado. Это может измениться в будущем, чтобы просто использовать aiohttp. Заставить циклы событий хорошо играть вместе может быть непросто. Самый простой способ, который я нашел, - это использовать библиотеку nest-asyncio. После установки вы можете написать что-то вроде этого. Я не показываю создание, но этот код предполагает, что соединение с сервером установлено и что
g
является источником обхода графа.
import nest_asyncio
nest_asyncio.apply()
async def count_airports():
c = g.V().hasLabel('airport').count().next()
print(c)
async def run_tests(g):
await count_airports()
return
asyncio.run(run_tests(g))
Как вы упомянули, другой вариант - использовать что-то вроде aiogremlin.
Любая последняя версия библиотеки gremlin поддерживает асинхронный код, но реализация не кажется простой, так как для выполнения запросов gremlinAsync использует будущее (документация о будущем )
Чтобы упростить чтение и реализацию, вы можете преобразовать объект Future, возвращаемый API-интерфейсом Gremlin, в сопрограмму, которая поддерживает синтаксис ожидания.
async def get_result(query, client):
result = await asyncio.wrap_future(client.submitAsync(query))
return result
client = gremlin_connection(environ.get("url"),environ.get("username"),environ.get("password"))
data = await get_result(query1, client)