简单的Flask项目运行缓慢

时间:2019-03-06 12:06:32

标签: python flask

我开始使用Flask,并发现一些奇怪的延迟问题。

Flask代码是最简单的“ Hello World!”。如下:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"
if __name__ == "__main__":
    app.run()

,它使用VM和Gunicorn安装在远程Ubuntu 18服务器上,如下所示:

gunicorn -b 0.0.0.0:5000 app:app --reload

我正在使用Python“请求”库在Windows 10下调用服务器,如下所示:

import requests, time

url = 'http://vps.XXXXX.ssdhosts.com.au:5000/'

t0 = time.time()
response = requests.get(url)                       
t1 = time.time()
total = t1-t0
print("Simple get request took " , total)

问题在于,调用远程函数的时间始终在0.7s和1s之间,对于这样一个简单的函数而言,这似乎很慢。通过阅读有关类似部署的信息,我的印象是此调用应该更快。

可以加快此功能吗?

我尝试过:

  • 对IP地址进行硬编码
  • 禁用IPv6
  • 在app.run()中设置threaded = True
  • 通过浏览器调用网址

这些都不起作用。

此外,服务器在澳大利亚,而我在英国。这会导致速度变慢吗?

2 个答案:

答案 0 :(得分:4)

是的,走遍世界的一半(据我了解,尤其是到澳大利亚)会导致延迟。只是简单地使用芬兰此处的Speedtest.net即可说,到悉尼的延迟为330毫秒,而离我最近的测试服务器的延迟为5毫秒。

我在阿姆斯特丹的Digital Ocean机器上复制了您的步骤:

~# cd $(mktemp -d)
/tmp/tmp.4ahzWvNRpX# python3.5 -m venv venv
/tmp/tmp.4ahzWvNRpX# source venv/bin/activate
(venv) /tmp/tmp.4ahzWvNRpX# pip install flask gunicorn
(venv) /tmp/tmp.4ahzWvNRpX# cat > app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"
if __name__ == "__main__":
    app.run()
(venv) /tmp/tmp.4ahzWvNRpX# gunicorn -b 0.0.0.0:5000 app:app --reload

在我的Mac上,使用与您相同的测试代码,我得到了完全可以忍受的60毫秒。

~/Desktop $ python3 x.py
Simple get request took  0.06290006637573242
~/Desktop $ python3 x.py
Simple get request took  0.06206989288330078
~/Desktop $ python3 x.py
Simple get request took  0.0690619945526123
~/Desktop $ python3 x.py
Simple get request took  0.06926107406616211
~/Desktop $

uwsgi应用程序服务器(uwsgi --http :5000 --master --wsgi app:app)的结果类似(uwsgi本身报告从代码中实际获得响应所需的时间不到1毫秒),但是我认为它们并发规模越大越好。

我最好的猜测是您的结果可能是缓慢的VPS 在世界范围内传播的复合影响。

答案 1 :(得分:0)

您是否尝试给不超过一名工人的枪械?

在gunicorn的CLI中添加“ -w 2”:

gunicorn -w 2 -b 0.0.0.0:5000 app:app --reload

... 5个月后,但希望这可能对其他人有帮助...