Python保持套接字连接活着

时间:2017-07-26 11:16:14

标签: python python-2.7 sockets flask uwsgi

我有一个带有flask的flask2.7服务器,flask_socketio,uwsgi

以下是代码示例:

from fit.app import app
from flask_socketio import SocketIO, emit
from fit.query import getESValue

socketio = SocketIO(app)

@socketio.on('get_client_info')
def handle_message(data):
    client = data["client"]
    p_id = data["p_id"]
    esvalues = getESValue(client, None, p_id)
    emit('client_results', {"client": client, "data": esvalues})


if __name__ == "__main__":
    socketio.run(app)

esvalues = getESValue(客户端,无,p_id)是一项高权重操作,最多可能需要15分钟。

但是它已成功完成,我正在尝试将结果发送到客户端并收到以下错误:

  

收到错误   Traceback(最近一次调用最后一次):     在_websocket_hand中输入文件“venv / local / lib / python2.7 / site-packages / engineio / socket.py”,第209行   LER       self.receive(PKT)     文件“venv / local / lib / python2.7 / site-packages / engineio / socket.py”,第53行,收到       self.send(packet.Packet(packet.PONG,pkt.data))     文件“venv / local / lib / python2.7 / site-packages / engineio / socket.py”,第67行,发送       提高IOError('套接字已关闭')   IOError:套接字已关闭

然后这一个:

  

错误:(9,'错误的文件描述符')   Wed Jul 26 13:29:28 2017 Greenlet at 0x7f4ba547be10:select_greenlet_runner(9,)>失败并出现错误

我认为我正在尝试使用已关闭的套接字连接。 如何在任务完成15分钟之前保持活着?

1 个答案:

答案 0 :(得分:-1)

可以通过在启动服务器时设置超时选项来解决此问题。可以通过更改此行来实现:

socketio.run(app)

socketio.run(app, ping_timeout=3600)

更改3600以符合您的要求