Могу ли я использовать клиент Gremlin Python в блокноте Jupyter и избежать ошибок цикла событий?

Я знаю о проекте graph-notebook, который позволяет отправлять запросы Gremlin с помощью магических команд. Однако иногда мне нужно написать код на Python и подключиться к серверу с помощью кода из обычной ячейки блокнота Jupyter. Если с помощью клиента Gremlin Python 3.5.2 я попытаюсь сделать что-то вроде этого:

      server = '<your server endpoint goes here>'
port = 8182

endpoint = f'wss://{server}:{port}/gremlin'

connection = DriverRemoteConnection(endpoint,'g')

g = traversal().withRemote(connection)

возникает ошибка, поскольку цикл обработки событий Jupyter уже запущен.

Есть ли способ обойти это?

2 ответа

Существует дополнительный параметр, который можно указать при создании удаленного подключения, который сообщает клиенту Python о вложении циклов событий. Вам просто нужно создать соединение по этим строкам:

      server = '<your server endpoint goes here>'
port = 8182

endpoint = f'wss://{server}:{port}/gremlin'
print(endpoint)

connection = DriverRemoteConnection(endpoint,'g',
                 transport_factory=lambda:AiohttpTransport(call_from_event_loop=True))

g = traversal().withRemote(connection)

Основное отличие состоит в том, что обычай transport_factoryпри условии, что на самом деле это просто lambdaобертка вокруг обычного AiohttpTransport, с call_from_event_loopпараметр установлен на True.

Эта дополнительная конфигурация указывает клиенту Gremlin Python применить соответствующие внутренние изменения для вложения циклов событий.

Не могу комментировать ответ Кельвина из-за низкой репутации, но требуется импорт:

      from gremlin_python.driver.aiohttp.transport import AiohttpTransport
Другие вопросы по тегам