2016-06-28 2 views
1

이것은 주위를 검색 할 때 자주 발생하는 문제인 것처럼 보이지만 실행 가능한 해결책을 찾지 못하는 것 같습니다. 저장 한 세션이 왜 사라 졌는지 알려주지 않으므로 오류 메시지는별로 도움이되지 않습니다.Flask-SocketIO를 사용하여이 KeyError 오류를 어떻게 수정합니까?

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

'Flask-socketIO'의 어떤 버전을 사용하고 있습니까? – formatkaka

+0

필자는 2.5 버전으로의 업그레이드를 제안하는 의견에 앞서 2.1 버전을 사용했는데 궁극적으로이 문제가 수정되었습니다. 감사합니다 –

답변

3

우선, flask-socketio, python-socketio 및 python-engineio 패키지를 업그레이드하십시오.

귀하의 문제를 해결할 것으로 생각합니다. 이 문제는 이전 버전의 Flask-SocketIO에서 발생했습니다. 이 조건에서 확인한 원인은 처리기 함수 (socketio.on() 데코레이터로 꾸미는 이러한 함수)가 CPU를 적절하게 해제하지 않은 상태에서 매우 오랫동안 실행되었다는 것입니다. 이 함수가 CPU를 해제하지 않고 60 초 이상 실행되면 시스템은 클라이언트가 사라지고 세션이 연결 해제 된 것으로 간주하여 나중에 해당 세션에 액세스 할 때 KeyError가 발생합니다.

이 오류는 최신 릴리스에서 해결되었습니다. 또한 백그라운드에서 실행되는 다른 작업이 수행해야 할 작업을 수행 할 수 있도록 CPU를 릴리스해야합니다.

+0

그랬어. 정말 고마워! 나는 flask-socketio를 제외한 모든 것을 업그레이드했고 어떻게 든 간과했다. 또한이 확장 프로그램을 좋아하고이 기능을 활용할 때마다 진심으로 감사의 말씀을 전합니다. 그것은 나를위한 가능성의 세계를 열었습니다! 고맙습니다! –

관련 문제