使用 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 相同。无需您执行任何操作,并发始终处于启用状态。
我已经开始在 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 相同。无需您执行任何操作,并发始终处于启用状态。