Короткий ответ
В функции отсутствует таймаут при сетевом вызове, из-за чего при зависании внешнего сервиса вызывающий поток будет ждать неограниченно долго, что может исчерпать пул воркеров приложения под нагрузкой.
Как это работает подробнее
Без указания timeout библиотека использует либо бесконечное ожидание, либо системное значение по умолчанию, которое может быть очень большим.
Пример кода
example.py
def fetch_rate():
return requests.get("https://fx-rates/latest", timeout=(2, 5)).json()Что использовать на практике
- Практика. Нужно всегда задавать явный таймаут для любого сетевого вызова (HTTP, БД, очередь), исходя из допустимой задержки для вызывающей стороны.
Подводные камни
- Риск. Добавлять таймаут только на уровне всего запроса (таймаут веб-сервера), а не на уровне конкретного исходящего вызова — зависший вызов всё равно держит воркер занятым.