Uploaded image for project: 'TinkerPop'
  1. TinkerPop
  2. TINKERPOP-2759

gremlinpython gives error "RuntimeError: Cannot run the event loop while another loop is running".

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 3.6.0
    • None
    • python
    • None
    • I am running the code inside Docker with Python 3.9 on Ubuntu 20.04 with relevant package versions as follows:

      gremlinpython==3.6.0
      uvicorn==0.17.6
      fastapi==0.78.0

    Description

      Im not sure if this is the correct place to post an issue. If not, I can redirect this elsewhere.

      I am trying to run a fastapi app with uvicorn but am struggling to run a gremlinpython query (run over AWS Neptune DB) inside. It seems like gremlinpython tries to start up a new event loop while one is already running. Is it possible to get gremlinpython to use the current event loop if there is one running?

      The following code snippet works when running with python3 but fails when running with uvicorn: 

       

      from gremlin_python.structure.graph import Graph
      from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
      
      from fastapi import FastAPI
      
      def run_query(conn_string, vertex_id):
          graph = Graph()
          remoteConn = DriverRemoteConnection(conn_string, 'g')
          g = graph.traversal().withRemote(remoteConn)
      
          details = g.V(vertex_id).valueMap(True).toList()
          print(details)
      
          remoteConn.close()
          return FastAPI()
      
      conn_string = '<conn_string>'
      vertex_id = '<vertex_id>'
      app = run_query(conn_string, vertex_id)
      
      # running with:
      # uvicorn {file_name}:app

       

       

      The error when running with uvicorn is as follows:

       

      File "/code/./app/main2.py", line 20, in <module>
          app = run_query(conn_string, vertex_id)
        File "/code/./app/main2.py", line 11, in run_query
          details = g.V(vertex_id).valueMap(True).toList()
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/process/traversal.py", line 62, in toList
          return self.to_list()
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/process/traversal.py", line 65, in to_list
          return list(iter(self))
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/process/traversal.py", line 48, in {}next{}
          self.traversal_strategies.apply_strategies(self)
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/process/traversal.py", line 682, in apply_strategies
          traversal_strategy.apply(traversal)
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/remote_connection.py", line 78, in apply
          remote_traversal = self.remote_connection.submit(traversal.bytecode)
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/driver_remote_connection.py", line 102, in submit
          result_set = self._client.submit(bytecode, request_options=self._extract_request_options(bytecode))
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/client.py", line 148, in submit
          return self.submit_async(message, bindings=bindings, request_options=request_options).result()
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/client.py", line 180, in submit_async
          return conn.write(message)
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/connection.py", line 55, in write
          self.connect()
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/connection.py", line 45, in connect
          self._transport.connect(self._url, self._headers)
        File "/usr/local/lib/python3.9/dist-packages/gremlin_python/driver/aiohttp/transport.py", line 80, in connect
          self._loop.run_until_complete(async_connect())
        File "uvloop/loop.pyx", line 1495, in uvloop.loop.Loop.run_until_complete
        File "uvloop/loop.pyx", line 1488, in uvloop.loop.Loop.run_until_complete
        File "uvloop/loop.pyx", line 1377, in uvloop.loop.Loop.run_forever
        File "uvloop/loop.pyx", line 515, in uvloop.loop.Loop._run
      RuntimeError: Cannot run the event loop while another loop is running

       

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              gaten Gavin Aten
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: