Python Flask SocketIO一次只执行一个请求
我简单的flask socketIO应用程序,但一次只有一个请求在执行“write_message”方法。 我使用的是eventlet(),根据文档,它可以处理并发请求Python Flask SocketIO一次只执行一个请求,python,flask,socket.io,flask-socketio,eventlet,Python,Flask,Socket.io,Flask Socketio,Eventlet,我简单的flask socketIO应用程序,但一次只有一个请求在执行“write_message”方法。 我使用的是eventlet(),根据文档,它可以处理并发请求 socketio = SocketIO(app) @socketio.on('write-message', namespace='/message') def write_message(data): //long task if __name__ == '__main__': print("Starti
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)
在这个漫长的任务中,你所做的实际上是关键。Eventlet是一个协作多任务框架,因此您需要每个任务释放CPU以允许其他任务运行。如果长任务没有释放CPU,那么其他任务将无法同时运行
使用eventlet在长任务中释放CPU的常用方法是经常调用
socketio.sleep(0)
。如果这是您的长期任务,请将其添加到您的循环中。谢谢您的回答。我正在运行深度学习模型,可能需要几秒钟。我添加了“socketio=socketio(app,async_mode=“eventlet”)”。eventlet是否具有最大请求数配置。
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/