Flask应用程序锁定多个进程

2024-06-08 08:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

古尼康:19.9.0

烧瓶:1.0.2

Python:3.6.7

我们有一堆内部API服务器数据科学模型,有数千个请求/秒。我们最近引入了一个新的进程,无论出于什么原因,当使用多个进程(Gunicorn是我们的默认值)时,它将为几百个请求提供服务,并锁定。在

如果我在没有Gunicorn的情况下将API作为裸文件运行,则以下操作正常:

app.run(ip, port=port, threaded=True)

如果我使用多个进程运行,它会在启动后立即锁定:

^{pr2}$

如果我将Gunicorn与workers=1一起使用,它也会锁定,配置如下:

preload_app = False
bind = "0.0.0.0:{}".format(8889)
workers = 1
debug = False
timeout = 120

我已经注释掉了端点中的所有代码,这对它的锁定没有任何影响。这感觉像是某种与依赖关系的冲突,但我很难找到它。在

如果我试图在锁定时使用strace进行附加,则会在主gunicorn进程上得到一个包含以下输出的紧密循环:

strace: Process 4387 attached
select(4, [3], [], [], {tv_sec=0, tv_usec=832486}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
select(4, [3], [], [], {tv_sec=1, tv_usec=0}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
select(4, [3], [], [], {tv_sec=1, tv_usec=0}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0
select(4, [3], [], [], {tv_sec=1, tv_usec=0}) = 0 (Timeout)
fstat(6, {st_mode=S_IFREG|001, st_size=0, ...}) = 0

在这一点上,有什么建议可以去哪里或者尝试什么?在


Tags: apiappsize进程portmodetimeoutsec
1条回答
网友
1楼 · 发布于 2024-06-08 08:21:52

这似乎是由于客户端数量和前面缺少反向代理(例如nginx)的组合。与客户机的数量相比,没有足够的可用工作人员开始对请求进行排队,这使工作人员不堪重负,以至于无法响应。我把工人人数增加到60人,而且生产能力也更加稳定。在

相关问题 更多 >