处理并发请求或使用eventlet线程化Flask SocketIO

时间:2018-02-04 18:10:51

标签: python socket.io webserver flask-socketio eventlet

我已经开始使用带有Eventlet的Python中的Flask SocketIO进行大量工作,并且正在寻找处理并发请求/线程的解决方案。我已经看到gevent可以实现,但是如果我使用eventlet怎么办呢?

2 个答案:

答案 0 :(得分:5)

eventlet Web服务器支持通过greenlet进行并发,与gevent相同。无需您执行任何操作,始终启用并发。

答案 1 :(得分:0)

您可以使用gunicorn或其类似物在多个工作人员的生产模式下启动应用。 如上所述here

gunicorn --worker-class eventlet -w 5 module:app

-w之后的数字是工作人员数量,module是您的烧瓶服务器模块,而app是烧瓶应用程序(app = flask.Flask(__name__))。每个worker都是忙于处理传入请求的进程,因此您将拥有并发性。如果您的应用确实占用了大量时间,那么执行该任务的工作人员在执行此任务时将会反应迟钝。

注意:如果您以这种方式启动应用程序,if __name__ == '__main__':部分将被忽略,您的模块似乎将被导入。在这种情况下,您不需要在模块中调用app.run