Python · 32 строк
Раз в 5 минут сервис проверяет 500 ПВЗ своего региона: открыт ли пункт, сколько ячеек свободно. Один запрос к API статусов — около 200 мс, при перегрузке API отвечает 429.
В том же цикле событий живёт HTTP-хендлер /health. Оркестратор перезапускает под, если тот не отвечает 10 секунд. Отметьте строки с ошибками.
В работе: Фоновый сервис мониторинга пунктов выдачи.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 2 вопроса про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Wildberries: пункты выдачи заказов. Условие пересказано своими словами.
Давали на собеседовании?
import asyncioimport timeimport requestsSTATUS_URL = "https://pvz-api.internal/v1/points/{}/status"async def check_point(point_id: int) -> dict:for attempt in range(3):resp = requests.get(STATUS_URL.format(point_id), timeout=5)if resp.status_code != 429:return resp.json()time.sleep(1)raise RuntimeError(f"ПВЗ {point_id}: 429 три раза подряд")async def check_all(point_ids: list[int]) -> list[dict]:results = []for pid in point_ids:results.append(await check_point(pid))return resultsasync def main():ids = list(range(1, 501))statuses = await check_all(ids)print(len(statuses))if __name__ == "__main__":asyncio.run(main())