Flask SocketIO一次执行一个请求



我的简单烧瓶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)
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/ 

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

使用eventlet在长任务中释放CPU的一种常见方法是经常调用socketio.sleep(0)。如果这就是你在长期任务中所拥有的,那么就把它添加到你的循环中。

最新更新