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

Python 如何在多线程模式下使用Gunicorn运行Flask,python,flask,machine-learning,gunicorn,Python,Flask,Machine Learning,Gunicorn,我用Flask编写了web应用程序。正如大家所建议的,我不能在生产中使用烧瓶。所以我想到了带烧瓶的Gunicorn 在Flask应用程序中,我加载了一些机器学习模型。它们的总大小为8GB。我的web应用程序的并发性可以达到1000个请求。机器的RAM为15GB。 那么,运行此应用程序的最佳方式是什么?您可以使用多个工作线程启动应用程序,也可以使用Gunicorn启动异步工作线程 Flask server.py from flask import Flask app = Flask(__name_

我用Flask编写了web应用程序。正如大家所建议的,我不能在生产中使用烧瓶。所以我想到了带烧瓶的Gunicorn

在Flask应用程序中,我加载了一些机器学习模型。它们的总大小为8GB。我的web应用程序的并发性可以达到1000个请求。机器的RAM为15GB。

那么,运行此应用程序的最佳方式是什么?

您可以使用多个工作线程启动应用程序,也可以使用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异步工作程序

gunicorn server:app -k gevent --worker-connections 1000
Gunicorn 1工人12个螺纹:

gunicorn server:app -w 1 --threads 12
Gunicorn有4名工人(多处理):


有关Flask并发的更多信息,请参阅本文:。

最好使用pre-fork模式()。这将在一个“主”进程中初始化代码,然后简单地分叉工作进程来处理请求。如果您在linux上运行,并且假设您的模型是只读的,那么操作系统足够智能,可以在所有进程中重用物理内存。

对于多个工作进程,由于模型的大小很大,它会抛出内存不足异常。我认为,对于每个worker,它将在不同的内存空间中加载所有模型。您需要使用异步worker-like gevent来允许与一个worker并发:
gunicorn-k gevent--worker connections 1000
。您还可以添加
--threads
,以使用指定数量的线程运行每个worker。请参阅编辑。如果我的api调用大约需要1秒,我应该使用哪种工作类型?我将使用gevent和monkey patch来修补你的应用程序:。你也可以看看芹菜来运行后台任务。鉴于这是相当古老的,但你能告诉我们你最后用了什么吗?目前情况相同。。
gunicorn server:app -w 4