Reputation: 1274
This seems to be a common problem when I search around, but I can't seem to find a viable resolution. The error is not very helpful as far as I can tell as it doesn't really tell you why the saved session is gone.
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'
Upvotes: 3
Views: 4953
Reputation: 67479
First of all, upgrade the following packages: flask-socketio, python-socketio and python-engineio.
I think that will address your issues. This problem occurred with older versions of Flask-SocketIO. The cause that I identified for this condition was that a handler function (these functions you decorate with socketio.on()
decorator) ran for a very long time without properly releasing the CPU. If the function ran for longer than 60 seconds without releasing the CPU, then the system mistakenly considered that the client was gone and disconnected the session, causing a KeyError when that session was accessed later.
The error is addressed in the latest release. But also please make sure you release the CPU so that other tasks that run in the background get a chance to do what they need to do.
Upvotes: 6