Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask应用程序锁定了多个进程_Python_Python 3.x_Flask_Gunicorn - Fatal编程技术网

Python Flask应用程序锁定了多个进程

Python Flask应用程序锁定了多个进程,python,python-3.x,flask,gunicorn,Python,Python 3.x,Flask,Gunicorn,Gunicorn:19.9.0 烧瓶:1.0.2 Python:3.6.7 我们有一系列内部API服务器数据科学模型,具有数千个请求/秒。我们最近引入了一个新的进程,无论出于什么原因,当与多个进程(Gunicorn是我们的默认值)一起使用时,它将服务数百个请求并锁定 如果我在没有Gunicorn的情况下将API作为裸文件运行,则以下操作正常: app.run(ip, port=port, threaded=True) 如果我使用多个进程运行,它会在启动后很快锁定: app.run(ip, po

Gunicorn:
19.9.0

烧瓶:
1.0.2

Python:
3.6.7

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

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

app.run(ip, port=port, threaded=True)
如果我使用多个进程运行,它会在启动后很快锁定:

app.run(ip, port=port, threaded=False, processes=2)
如果我将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

有没有关于在这一点上应该去哪里或尝试什么的建议?

这似乎是由于客户端数量的组合以及前面缺少反向代理(如nginx)。与客户端数量相比,没有足够的工作人员开始排队请求,这使工作人员不知所措,以至于他们将停止响应。我将工人人数增加到60人,吞吐量也更加稳定。

因为您的api每秒有1000个请求,我不确定,也许芹菜可以帮助你避免这个问题,我们不是在找工作。这是一个HTTP端点,在未锁定时会执行一位数毫秒响应。您是否尝试过减少gunicorn worker超时?我看到你把它设置为120秒,但是由于你的应用程序的响应时间是以毫秒为单位的,所以把超时时间减少到低于30秒(默认值)是值得的。这是相当保守的b/c有时会有一些异常值,但这是一个非常小的少数。