Я использую 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?Кто-нибудь еще сталкивался с такой проблемой?
Любая помощь будет оценена