Есть ли способ использовать 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)
Другие вопросы по тегам