当前位置: 首页 > 知识库问答 >
问题:

启动时在Docker[关键]WORKER TIMEOUT中运行GUnicorn Flask应用程序

皮自明
2023-03-14

我想用Docker中的gunicorn运行Flask web服务应用程序。启动后,应用程序加载一个大型机器学习模型。

然而,当我在Docker中运行gunicorn时,我收到了以下超时,它只是不断地繁殖工人。

[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1198) 
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1204)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1210)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1211)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1222)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1223)
[2019-12-12 21:52:42 +0000] [1264] [INFO] Booting worker with pid: 1264
[2019-12-12 21:52:42 +0000] [1265] [INFO] Booting worker with pid: 1265
[2019-12-12 21:52:42 +0000] [1276] [INFO] Booting worker with pid: 1276
[2019-12-12 21:52:42 +0000] [1277] [INFO] Booting worker with pid: 1277
[2019-12-12 21:52:42 +0000] [1278] [INFO] Booting worker with pid: 1278
[2019-12-12 21:52:42 +0000] [1289] [INFO] Booting worker with pid: 1289

在Docker中将其作为烧瓶应用程序运行或从命令行运行带有(或不带有)Gunicorn的烧瓶应用程序都可以正常工作。如果我删除html" target="_blank">机器学习模型,它也适用于Gunicorn。

例如:

$python app.py

$gunicorn -b 0.0.0.0:8080 --workers=2 --threads=4 app:app

$gunicorn app:app

这是我与Flask开发服务器的Dockerfile。很好。

ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD python app.py

如果我按照以下方式运行Gunicorn,它只会不断产生工人:

CMD gunicorn -b 0.0.0.0:8080 --workers=2 --threads=4 app:app
or
CMD ["gunicorn", "app:app"]

Gunicorn有一个--timeout=30参数。默认为30秒,我将其增加到300秒。这似乎没有影响。

注意:我为Starlette库重新编写了应用程序,收到了相同的结果!

感谢您的指导。

谢谢,杰

共有2个答案

马清野
2023-03-14

试试这个CMD["Gunicorn","--timeout","1000","--works=1","-b","0.0.0.0:8000","--log-level","debug","管理"]

韶亮
2023-03-14

我需要添加gunicorn——超时,如下所示:

CMD gunicorn --timeout 1000 --workers 1 --threads 4 --log-level debug --bind 0.0.0.0:8000 app:app

我在部署谷歌云平台时也遇到了问题。日志只显示了一条杀戮信息。增加计算实例中的内存解决了这个问题。

 类似资料:
  • 问题内容: 我写了一个Qt应用程序,它将在Linux上运行。它应该在启动时运行。 它应该在每个Linux- Suse,RedHat等上运行。 我应该写什么脚本,放在哪里? 我根本不知道如何编写脚本,因此,如果您附上示例,我将不胜感激。 问题答案: 您需要为您的应用程序创建一个桌面入口文件(请参阅此处),并将其放置在用户目录中。 Window Manager启动时,该目录中的任何桌面条目文件都将被执

  • 问题内容: 我有一个包含Java应用程序的JAR文件。如何使它从Windows开始而不需要用户交互? 问题答案: 创建一个.bat文件,并将其放入其中: 然后将.bat文件放入Windows启动文件夹。 还有一件事:使用java和javaw之间是有区别的。虽然在调试应用程序时使用Java更好,但应用程序会打印文本或类似内容,而在不需要时,javaw则更好。为什么?因为java使用控制台显示所有应用

  • 我有一个包含Java应用程序的JAR文件。如何在不需要用户交互的情况下从Windows开始?

  • 我正在docker容器中运行一个简单的spring boot应用程序。在启动时,是否从或应用程序将始终在以下时间点挂起: 这里有一个问题,我只能在数字海洋(1CPU,1GB MEM)的Ubuntu 14.04盒子上重现这个,即使它在容器中运行。在我的本地机器上,一切都运行良好。 Dockerfile文件: 我尝试过的事情 给JVM更多内存(占机器总数的75%) 按这里建议的方式停止库 我能接触到的

  • 问题内容: 我有一个需要开发读取TCP / IP套接字的应用程序的要求。我成功地将程序制作为Java程序且没有GUI,这意味着程序一旦运行,便开始侦听Socket并在Netbeans IDE的帮助下获得响应。现在根据我的要求,我必须在Linux系统启动后立即开始执行该程序。 其实我是Java和Linux平台的新手,所以毫无疑问。 我的没有GUI的套接字程序是否可以按我的要求运行? 我知道如何在Li

  • 我有一份Java申请。 应用程序有一个决定应用程序是否在启动时启动的设置。 目前,我通过在StartUp items文件夹中放置/删除快捷方式实现了这一点。 然而,我想知道是否有更好的方法来处理这种行为。 编辑 是的,是视窗。抱歉之前没有清除。 应用程序有一个UI,用户可以在其中触发操作,并且应用程序在运行时定期在后台运行一些任务。 @Peter,如何使用应用程序中的代码更改注册表?这种方法是否与