我简单的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)
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)
。如果这是您的长期任务,则将其添加到循环中。