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

Handle concurrent requests or threading Flask SocketIO with eventlet

我已经开始在 Python 中使用 Eventlet 大量使用 Flask SocketIO,并且正在寻找处理并发 requests/threading 的解决方案。我看到用gevent是可以的,但是如果我用eventlet怎么办呢?

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

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

其中-w后面的数字是worker的数量,module是你的flask-socketio server module,app是flask app (app = flask.Flask(__name__)) .每个工作人员都是一个忙于处理传入请求的进程,因此您将具有并发性。如果您的应用程序的任务确实需要花费大量时间,那么执行该任务的工作人员在执行该任务时将反应迟钝。

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

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