使用Gunicorn异步工人运行Flask应用程序的效率似乎低于devs

2024-04-24 13:38:03 发布

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

我在烧瓶里开发了一个网络应用程序。设置很简单。该应用程序正在Gunicorn上运行。所有请求都通过nginx代理。Flask应用程序本身向外部API发出HTTP请求。从flask应用程序到外部API的HTTP请求由前端javascript代码的AJAX调用启动。外部API将JSON格式的数据返回到Flask应用程序,然后返回到前端。在

问题是,当我在开发模式下使用选项multithreaded = True运行这个应用程序时,我可以看到JSON数据异步返回到服务器,并且可以很快在前端页面上看到结果。在

但是,当我尝试使用nginx和gunicorn在生产模式下运行应用程序时,我看到JSON数据按顺序返回-一个接一个地缓慢退出。似乎由于某种原因,对外部API的HTTP请求被阻塞了。在

我在linux UbuntuServer16.04上使用supervisor。这就是我如何通过主管启动gunicorn:

command = /path/to/project/env/bin/gunicorn -k gevent --worker-connections 1000 wsgi:app -b localhost:8500

看起来,gunicorn不异步地处理请求,尽管它应该这样做。在

作为实验,我使用wsgi服务器(而不是gunicorn)在开发模式下运行Flask应用程序,debug=True和{}。所有请求仍然通过nginx代理。JSON数据返回得更快,即异步(似乎调用没有阻塞)。在

我读了古尼康的文件。它说如果我需要调用外部API,那么我应该使用异步工作线程。我用过,但没用。在

所有的缓存都被考虑在内了。我可以假设我不使用任何缓存。当我检查服务器设置时,我把它都清除了。在

我错过了什么?我怎样才能让古尼康如期而至?在

谢谢。在


Tags: 数据服务器apijsontrue应用程序httpflask
1条回答
网友
1楼 · 发布于 2024-04-24 13:38:03

实际上,我很快就解决了这个问题,却忘了马上把答案贴出来。gunicorn服务器没有像我预期的那样及时处理请求的原因非常简单和愚蠢。因为在我将配置更改为:

command = /path/to/project/env/bin/gunicorn -k gevent  worker-connections 1000 wsgi:app -b localhost:8500 

我忘了跑:

^{pr2}$

虽然很简单,但并不明显。我的错误是,我期望配置在gunicorn上重新启动应用程序后自动更新,使用以下命令:

sudo supervisorctl restart my_app

是的,它会重新启动应用程序,但不会重新启动gunicorn的配置。在

相关问题 更多 >