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