Flask SocketIO一次执行单个请求

问题描述 投票:0回答:2

我简单的flask socketIO应用,但是一次只有一个请求正在执行方法“ write_message”。我正在使用eventlet(https://eventlet.net/),根据文档它可以处理并发请求。

socketio = SocketIO(app)

@socketio.on('write-message', namespace='/message') 
def write_message(data):
    //long task

if __name__ == '__main__':
    print("Starting socket app on port 5000")
    socketio.run(app, host='0.0.0.0', port=5000)
python flask socket.io flask-socketio eventlet
2个回答
0
投票
you can use gunicorn gevent to serve socket application . as per documentation.

"gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app"


https://flask-socketio.readthedocs.io/en/latest/ 

0
投票

您在漫长的任务中所做的实际上是这里的关键。 Eventlet是一个协作式多任务框架,因此您需要每个任务来释放CPU以允许其他任务运行。如果您的长任务没有释放CPU,则其他任务将无法同时运行。

在带有eventlet的长任务中释放CPU的常见方法是经常调用socketio.sleep(0)。如果这是您的长期任务,则将其添加到循环中。

© www.soinside.com 2019 - 2024. All rights reserved.