Колба request.form.get слишком медленная? - PullRequest
0 голосов
/ 23 ноября 2018

Я использую Flask для своей службы Web Api.

Обнаружив, что мои службы иногда (1/100 запросов) отвечают очень медленно (в секундах), я начал отладку, которая показала мне, что иногда служба зависаетчтение поля запроса.

@app.route('/scan', methods=['POST'])
def scan():
    start_time = time.time()
    request_description = request.form.get('requestDescription')
    end_time = time.time()
    app.logger.debug('delay is ' + end_time-start_time)

Здесь я обнаружил, что задержка между start_time и end_time может составлять до 2 минут.

Я читал об использовании Werkzeug Flask в качестве рабочего сервера, поэтомуЯ попробовал GUnicorn как альтернативу - тоже самое.

Я чувствую, что моя проблема как-то похожа на эту , с той разницей, что другой сервер не решил проблему.

Я попытался профилировать приложение, используя cProfile и SnakeViz , но с непродаваемым сервером Werkzeug - так как я не понимаю, как профилировать приложения Python, работающие на GUnicorn.(может, кто-нибудь здесь знает, как это сделать?)

Мои запросы POST содержат описание и файл.Файл может различаться по размеру, но журналы показывают, что проблема воспроизводится независимо от размера файла .

Люди также обычно говорят, что Flask следует использовать в Nginx- [обычный сервер] -фляга комбо, но поскольку я использую сервис внутри Openshift, я сомневаюсь, что это имеет какое-то значение.(HaProxy работает как балансировщик)

Так что мои настройки: Alpine 3.8.1 GUnicorn: работники: 3 темы: 1

Что происходит под капотом, когда я это называю?

request.form.get('requestDescription')

Как я могу профилировать код Python под GUnicorn?Кто-нибудь еще сталкивался с такой проблемой?

Любая помощь будет оценена

...