Поместите тайм-аут на вызовы на нескромный маршрут Flask (обновлено)

66
5

В настоящее время у меня есть маршрут в приложении Flask, который извлекает данные с внешнего сервера, а затем выводит результаты на передний план. Внешний сервер иногда медленный или не реагирующий. Каков наилучший способ поместить тайм-аут на вызов маршрута, чтобы внешний интерфейс не зависал, если внешний сервер отстает? Или есть более подходящий способ справиться с этой ситуацией в Flask (не Apache, nginx и т.д.)?

Моя цель - тайм-аут вызова маршрута, а не сохранить произвольный длительный процесс, как этот вопрос: вопрос времени с хромом и флягой. Параметры, такие как websockets, запускают фоновые процессы/потоки, пока они не закончатся; однако, я хочу остановить медленный вызов маршрута по истечении определенного фиксированного количества времени. Подобно Timeout при вызове функции и тайм-ауте Python, но в контексте Flask. Дизайнер заданий на сельдерей (параллельные асинхронные процессы с Python, Flask и Celery) кажется отличным решением, но я не хочу требовать большой зависимости, чтобы использовать только небольшое количество его функций.

спросил(а) 2013-08-10T20:11:00+04:00 6 лет, 11 месяцев назад
1
Решение
66

Не совсем уверен, что я прав обо всем этом, но я понимаю, что если поток (или greenthread), обрабатывающий запрос, выполняет вызов сети в своем собственном "переднем плане", и это время вызова, borken pipe в значительной степени должно случиться. Но то, что вы можете сделать, это отделить полностью отдельный поток, который выполняет сетевой запрос, а затем вызвать Thread.join() с тайм-аутом в вашем коде обработки запроса.

http://docs.python.org/2/library/threading.html#threading.Thread.join

В этот момент вызовите Thread.isAlive() (все еще в вашем пути обработки кода запроса), и если True, сетевой вызов не вернется вовремя и вы вернете свое состояние ошибки.

Если это False - и вам понадобится, чтобы поток "worker" обновил некоторую (потокобезопасную) структуру данных с данными ответа - вы получите данные ответа и продолжаете свой путь.

ответил(а) 2013-08-10T20:39:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема