如何在多线程模式下使用Gunicorn运行Flask

时间:2016-03-07 06:51:24

标签: python flask machine-learning gunicorn

我有使用Flask编写的Web应用程序。正如大家所建议的那样,我不能在生产中使用Flask。所以我想到了 Gunicorn with Flask

在Flask应用程序中,我正在加载一些机器学习模型。它们的总体尺寸为8GB。我的Web应用程序的并发性可以达到 1000个请求。机器的RAM是15GB 那么运行这个应用程序的最佳方法是什么?

2 个答案:

答案 0 :(得分:31)

您可以与Gunicorn的多名工作人员或异步工作人员一起启动您的应用程序。

Flask server.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Gunicorn与gevent async worker

gunicorn server:app -k gevent --worker-connections 1000

Gunicorn 1名工作者12个帖子:

gunicorn server:app -w 1 --threads 12

Gunicorn有4名工人(多处理):

gunicorn server:app -w 4

本帖中有关Flask并发性的更多信息:How many concurrent requests does a single Flask process receive?

答案 1 :(得分:3)

最好的方法是使用前叉模式(preload_app=True)。这将在“主”进程中初始化您的代码,然后简单地派生工作进程来处理请求。如果您在Linux上运行并且假设模型是只读的,则OS足够智能,可以在所有进程之间重用物理内存。