Pull to refresh

Comments 17

А не маловато ли итераций в бенчмарке? 0.013 секунд на все выглядит как значение очень чувствительное к джиттеру от переключенич задач в ОС.

Никогда не использовать.

Попытка оптимизировать Питон через слоты показывает большой просчет в архитектуре.

На маленьком количестве данных разницы не будет заметно, а когда данных много стоит смотреть в сторону Restricted Computation Domain. Например numpy, который хранит данные с минимальным оверхедом.

Использую слоты, но не ради перфоманса, а как самодокументацию и защиту от соблазнов что-нибудь добавить вне init.

Я иммутабельный NamedTuple или pydantic.BaseModel если нужно с сериализацией работать. Я верь своим коллегам и не делаю дополнительной работы по защите.

В принципе, ничего против не имею, но контейнерам контейнерово, а в общем случае - slots. Если я вижу NamedTuple, dataclass, attrs или BaseModel, то я не ожидаю какой-то серьёзной логики в классе.

Для содомодокументации многое даст политика документации принятая в проекте. А слоты стоят часто на первом месте после объявления класса и вместе c корректным названием класса могут заменить docstring, так еще и бенефит по памяти, который никаким педантиком и датаклассами не достичь.

так еще и бенефит по памяти, который никаким педантиком и датаклассами не достичь.

И скорее всего не померить :)

class Point(NamedTuple):
    x: int
    y: int

Вроде тоже достаточно самодокументирующийся код.

Я про дашборд в графане про потребление памяти и загрузку процессора вашим приложением.

Вы создаёте 264 тысячи инстансов в секунду? если нет, то классы справятся с такой нагрузкой.

В один мегабайт умещается 1500 классов и 5500 классов со слотами.

У меня приложение которое держит в памяти около десяти тысяч pydantic объектов потребляет 200-400MB. Ну упорюсь я, его на слоты перепишу, сколько я выиграю? Кроме самих данных, там куча словарей для упрощения вычислений.

15 процентов процессора потребляет в течении минуты раз в 15 минут. От шумных соседей будет больше разницы чем от слотов.

Опечатка была в комментарии про документацию сомов. В моем - грустная правда. 😥

Я бы посмотрел на организацию токенов лексера в np.array

А сколько миллионов токенов у вас? Ну ли в мегабайтах потребляемой памяти.

Для парсинга должны быть сторонние библиотеки, которые вычитают эти токены из файла и положат их в память эффективно. Парсинг это точно не та вещь которую нужно оптимизировать внутри Питона.

Есть примеры кода которые вы используете?


Не совсем, заменяет внутренню реализация классов, аттрибуты вместо словаря хранятся в кортеже.

Sign up to leave a comment.

Articles