Проект Simple Flask работает медленно - PullRequest
1 голос
/ 06 марта 2019

Я начал работать с Flask и обнаружил некоторые странные проблемы с задержкой.

Код Flask - самый простой из возможных «Hello World!»следующим образом:

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

и он установлен на удаленном сервере Ubuntu 18 с использованием виртуальной машины и Gunicorn следующим образом:

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,7 с до 1 с, что кажется медленным для такой простой функции.Из прочтения о подобных развертываниях у меня сложилось впечатление, что этот вызов должен быть намного быстрее.

Можно ли ускорить эту функцию?

Я пытался:

  • hard-кодирование IP-адреса
  • отключение IPv6
  • настройка threadaded = True в app.run ()
  • вызов веб-адреса из браузера

Ничто из этого не имеет значения.

Кроме того, сервер находится в Австралии, а я в Великобритании.Это вызвало бы замедление?

1 Ответ

4 голосов
/ 06 марта 2019

Да, обход на полпути (особенно в Австралию, как я понимаю) вызовет задержку. Простое использование 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 и , распространяющегося по всему миру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...