2016-06-28 14 views
1

Dies scheint ein häufiges Problem zu sein, wenn ich herumsuche, aber ich kann keine brauchbare Auflösung finden. Der Fehler ist nicht sehr hilfreich, soweit ich das beurteilen kann, da er nicht wirklich sagt, warum die gespeicherte Sitzung weg ist.Wie behebe ich diesen KeyError Fehler mit Flask-SocketIO?

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/eventlet/wsgi.py", line 481, in handle_one_response 
    result = self.application(self.environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/flask_socketio/__init__.py", line 37, in __call__ 
    start_response) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/middleware.py", line 47, in __call__ 
    return self.engineio_app.handle_request(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 303, in handle_request 
    return self.eio.handle_request(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/server.py", line 226, in handle_request 
    environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 79, in handle_get_request 
    start_response) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 118, in _upgrade_websocket 
    return ws(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/async_eventlet.py", line 13, in __call__ 
    return super(WebSocketWSGI, self).__call__(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/eventlet/websocket.py", line 127, in __call__ 
    self.handler(ws) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 180, in _websocket_handler 
    self.receive(pkt) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 48, in receive 
    self.server._trigger_event('message', self.sid, pkt.data) 
    File "/usr/local/lib/python2.7/dist-packages/engineio/server.py", line 330, in _trigger_event 
    return self.handlers[event](*args) 
    File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 429, in _handle_eio_message 
    self._handle_event(sid, pkt.namespace, pkt.id, pkt.data) 
    File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 371, in _handle_event 
    r = self._trigger_event(data[0], namespace, sid, *data[1:]) 
    File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 397, in _trigger_event 
    return self.handlers[namespace][event](*args) 
    File "/usr/local/lib/python2.7/dist-packages/flask_socketio/__init__.py", line 199, in _handler 
    self.server.environ[sid]['saved_session'] = {} 
KeyError: 'baee47721e474a1a9885b41ee0ce1847' 
+1

Welche Version von 'Flask-socketIO' verwenden Sie? – formatkaka

+0

Ich war auf Version 2.1 vor den Kommentaren hier, was das Upgrade auf 2.5 vorschlägt, was letztendlich das Problem behob. Danke –

Antwort

3

Zunächst, aktualisieren Sie die folgenden Pakete: Kolben-socketio, Python-socketio und Python-Engineio.

Ich denke, das wird Ihre Probleme angehen. Dieses Problem trat bei älteren Versionen von Flask-SocketIO auf. Die Ursache, die ich für diese Bedingung identifiziert habe, war, dass eine Handler-Funktion (diese Funktionen dekorieren Sie mit socketio.on() Decorator) für eine sehr lange Zeit ausgeführt wurde, ohne die CPU ordnungsgemäß freizugeben. Wenn die Funktion länger als 60 Sekunden ausgeführt wurde, ohne die CPU freizugeben, hat das System fälschlicherweise angenommen, dass der Client nicht mehr aktiv ist und die Sitzung getrennt wurde, was zu einem KeyError führte, wenn später auf diese Sitzung zugegriffen wurde.

Der Fehler ist in der neuesten Version behoben. Stellen Sie aber auch sicher, dass Sie die CPU freigeben, damit andere Aufgaben, die im Hintergrund ausgeführt werden, die Möglichkeit haben, das zu tun, was sie tun müssen.

+0

Das hat es geschafft. Vielen Dank! Ich hatte alles anders als Flasch-Steckdose und habe das irgendwie übersehen. Auch ich liebe diese Erweiterung und möchte meine aufrichtige Wertschätzung für die Zeit, die Sie in diese setzen. Es hat mir eine Welt voller Möglichkeiten eröffnet! Vielen Dank! –