Comments 17
А не маловато ли итераций в бенчмарке? 0.013 секунд на все выглядит как значение очень чувствительное к джиттеру от переключенич задач в ОС.
Никогда не использовать.
Попытка оптимизировать Питон через слоты показывает большой просчет в архитектуре.
На маленьком количестве данных разницы не будет заметно, а когда данных много стоит смотреть в сторону Restricted Computation Domain. Например numpy, который хранит данные с минимальным оверхедом.
Использую слоты, но не ради перфоманса, а как самодокументацию и защиту от соблазнов что-нибудь добавить вне init.
Я иммутабельный NamedTuple или pydantic.BaseModel если нужно с сериализацией работать. Я верь своим коллегам и не делаю дополнительной работы по защите.
А что слоты дают для сомодокументации?
Для содомодокументации многое даст политика документации принятая в проекте. А слоты стоят часто на первом месте после объявления класса и вместе c корректным названием класса могут заменить docstring, так еще и бенефит по памяти, который никаким педантиком и датаклассами не достичь.
так еще и бенефит по памяти, который никаким педантиком и датаклассами не достичь.
И скорее всего не померить :)
class Point(NamedTuple):
x: int
y: int
Вроде тоже достаточно самодокументирующийся код.
Ну почему же не померить.
However, what is most surprising is that namedtuple instances take a bit more memory than instances with slots.
Или тут: https://tommyseattle.com/python-class-dict-named-tuple-performance-and-memory-usage/
Я про дашборд в графане про потребление памяти и загрузку процессора вашим приложением.
Вы создаёте 264 тысячи инстансов в секунду? если нет, то классы справятся с такой нагрузкой.
В один мегабайт умещается 1500 классов и 5500 классов со слотами.
У меня приложение которое держит в памяти около десяти тысяч pydantic объектов потребляет 200-400MB. Ну упорюсь я, его на слоты перепишу, сколько я выиграю? Кроме самих данных, там куча словарей для упрощения вычислений.
15 процентов процессора потребляет в течении минуты раз в 15 минут. От шумных соседей будет больше разницы чем от слотов.
содомодокументации
Опечатка или ирония?
Я бы посмотрел на организацию токенов лексера в np.array
А сколько миллионов токенов у вас? Ну ли в мегабайтах потребляемой памяти.
Для парсинга должны быть сторонние библиотеки, которые вычитают эти токены из файла и положат их в память эффективно. Парсинг это точно не та вещь которую нужно оптимизировать внутри Питона.
Есть примеры кода которые вы используете?
Так понимаю, это костыльный способ реализовать Struct ?
Атрибут или Dunder-метод slots в Python. Что нужно о нём знать?