Python 使用eventlet处理并发请求或线程

Python 使用eventlet处理并发请求或线程,python,socket.io,webserver,flask-socketio,eventlet,Python,Socket.io,Webserver,Flask Socketio,Eventlet,我已经开始在Python和Eventlet中大量使用Flask SocketIO,并正在寻找处理并发请求/线程的解决方案。我已经看到gevent是可行的,但是如果我使用eventlet,我该怎么做呢?你可以使用gunicorn或其类似物在生产模式下与几个工人一起启动应用程序。 如前所述: 其中-w后面的数字是工作人员的数量,模块是您的flask socketio服务器模块,app是flask应用程序(app=flask.flask(\uu name\uuu))。每个工作进程都是一个忙于处理传入请

我已经开始在Python和Eventlet中大量使用Flask SocketIO,并正在寻找处理并发请求/线程的解决方案。我已经看到gevent是可行的,但是如果我使用eventlet,我该怎么做呢?

你可以使用
gunicorn
或其类似物在生产模式下与几个工人一起启动应用程序。 如前所述:

其中
-w
后面的数字是工作人员的数量,
模块
是您的flask socketio服务器模块,
app
是flask应用程序(
app=flask.flask(\uu name\uuu)
)。每个工作进程都是一个忙于处理传入请求的进程,因此您将具有并发性。如果应用程序中的任务确实花费了大量时间,那么执行该任务的工作人员在执行时将不负责任


注意:如果您以这种方式启动应用程序,则会忽略
如果_uname__=='_u main__;':
部分,似乎您的模块将被导入。您不需要调用
app。在本例中,自己在模块中运行

eventlet web服务器通过greenlets支持并发,与gevent相同。无需执行任何操作,并发始终处于启用状态。

我认为您应该查看flask的部署工具,如
gunicorn
。在flask socketio docs页面中有更多关于这个问题的信息,你可以在那里设置一些工作人员来进行并发。我对此投了反对票,因为这是不正确的。gunicorn不能使用多个worker,因为它缺少“粘性会话”支持。Socket.IO协议需要粘性会话才能与多个工作进程一起工作。本文介绍了Flask SocketIO应用程序的有效部署方法。谢谢Miguel,很高兴知道。尽管如此,您认为除了使用eventlet作为worker之外,使用gunicorn还会有什么好处吗?eventlet支持并行吗?我不会说它有什么好处。Eventlet附带了一个基于greenlet的WSGI服务器和gunicorn。您可以将任何一个与Flask SocketIO一起使用。Eventlet与gevent一样,在单个线程中运行,并使用协作多任务。
gunicorn --worker-class eventlet -w 5 module:app