tornado.iostream.StreamClosedError: Поток закрыт gremlin- ​​python - PullRequest
2 голосов
/ 29 марта 2020

У меня есть API, который запрашивает космический граф DB, используя gremlin- ​​python. Но если вызовы не выполняются в течение нескольких часов, появляется эта ошибка

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/tornado/websocket.py", line 1104, in wrapper
    await fut
tornado.iostream.StreamClosedError: Stream is closed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/app/disc_api.py", line 20, in visu
    r=final()
  File "/app/dis_parse.py", line 58, in final
    par.add('nodes',parser_node())
  File "/app/dis_parse.py", line 18, in parser_node
    n=node()
  File "/app/cosmo.py", line 16, in node
    for result in callback.result():
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 432, in result
    return self.__get_result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/usr/local/lib/python3.6/site-packages/gremlin_python/driver/connection.py", line 63, in cb
    f.result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 425, in result
    return self.__get_result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/usr/local/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.6/site-packages/gremlin_python/driver/protocol.py", line 66, in write
    self._transport.write(message)
  File "/usr/local/lib/python3.6/site-packages/gremlin_python/driver/tornado/transport.py", line 37, in write
    lambda: self._ws.write_message(message, binary=True))
  File "/usr/local/lib/python3.6/site-packages/tornado/ioloop.py", line 532, in run_sync
    return future_cell[0].result()
  File "/usr/local/lib/python3.6/site-packages/tornado/websocket.py", line 1106, in wrapper
    raise WebSocketClosedError()
tornado.websocket.WebSocketClosedError

мой API выглядит следующим образом

app = Flask(__name__)

CORS(app)

@app.route('/visu', methods=['GET'])
def visu():
    r=final()
    return r

функция final () - это синтаксический анализатор, который вызывает эти функции

from gremlin_python.driver import client, serializer
import sys
import traceback
import json, ast
client = client.Client('wss://database.gremlin.cosmos.azure.com:443/', 'g',
                           username="/dbs/graphdb/colls/graph_name",
                           password="password"
                           )


def node():
    query='g.V()'
    callback=client.submitAsync(query)
    for result in callback.result():
        a=ast.literal_eval(json.dumps(result))
        return a

def edges():
    query='g.V().outE()'
    callback=client.submitAsync(query)
    for result in callback.result():
        #print (json.dumps(result))
        r=ast.literal_eval(json.dumps(result))

        return r

def count(name):
    query='g.V().has("name",'+'"'+name+'").count()'
    callback=client.submitAsync(query)

    for result in callback.result():
        resu=result
        return resu

Я не знаю, что вызывает эту ошибку и что я должен изменить в своем коде, чтобы решить ее. Это первый раз, когда я использую гремлин ... что-то, чего мне не хватает, потому что я не нашел ничего в документации, связанной с этим.

...