ошибку в 4 строчках кода, где откуда-то брался list index out of range
В общем, я намошнил отдельный деплой логов в прод и теперь я узнал где ошибка. Так вот, ошибка возникает вот в этой строчке
index = bisect(self.metadata_cache, metadata_id) - 1
Вопрос следующий — может у кого есть какие-то предположения? Или мб ктото сам с этим сталкивался? В гугле глухо как-то, а перед погружением в исходники хочется попробовать путь попроще)
Гугл, первый ответ
И что же написано в первом ответе в гугле?
У меня другая информация по исходникам, более того, этот код содержит ошибку
Ну я смотрел bisect.py из стандартной библиотеки
Насколько я понимаю, там внутри код на сях и при больших числах вызывает переполнение инта или что там у них и уб во всей красе
10 лет назад вроде пофиксили эту тему https://bugs.python.org/issue13496
Вряд ли размер списка может быть достаточным, чтобы вызвать переполнение
2.5кк рпс на сервис, 10-15к рпс на инстанс. Может-может)
Ну там Py_ssize_t везде используется для индексов. Если последовательность с такой длиной существует, то, раз длина поместилась, с учётом того фикса переполнение должно быть невозможно получить. Да и даже без того фикса, я думаю со списком невозможно было бы добиться такого эффекта (в той issue вроде тоже об этом написано). Чтобы добиться неправильного поведения, они использовали искусственные последовательности, которые на самом деле ничего не хранят и потому могли достичь нужного размера
Traceback (most recent call last): File "/opt/app/metadata_downloader/memory_cache/metadata_cache.py", line 82, in get_metadata_from_cache index = bisect(self.metadata_cache, metadata_id) - 1 IndexError: list index out of range Вот весь трейсбэк. Мне тоже кажется, что это херня все про переполнение, но ничего лучше я не придумал
У питона есть прикол, что если после запуска файл модифицировать, при отображении ошибки он будет использовать строчку со старым номером
Ну тут кто-то кидал черновик статьи на хабре и там про это говорил, но я чет сомневаюсь, что у меня чет такое происходит без моего ведома(полностью мною написан сервис)
При запуске он загружает файл в память
В общем мне кажется что скорее всего или размер списка уменьшился, или файл был изменён после запуска и в ошибке указана не та строка
А есть что-то в питоне, что может неявно уменьшить размер списка?
__slots__ которые?
Так, это интересно, прошу, продолжай
имеется ввиду len
Обсуждают сегодня