14289
Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/1961404
я just-in-time читатель чатика, скроллбек листать лень :D
Читать полностью…
Чексум с адлер32 решился за меньше чем 50 строк. Алгоритм точечного обновления я даже хз сколько займет и даст ли это вообще прирост. Там надо строить хэш таблицу для дерева и по всему проходить
Читать полностью…
вопрос скорее всего в том, что переделывать рабочее решение ради сомнительных плюсов нету смысла
Читать полностью…
Я чуть поменьше сделал - стал загружать скаляр типы вместо сложных ipv4
Читать полностью…
кстати этот самый bytearray можно прозрачно между процессами расшарить через mmap или что там нынче
Читать полностью…
Надо объяснять почему решение в +500 строк кода не норм?
Читать полностью…
а у него есть какие-то критерии кроме "подозрительно низкий рефкаунт"?
Читать полностью…
(если они конечно там всё не переделали в последние годы со своим фритредингом)
Читать полностью…
На adler32 - 4 нс на 15 мегов. Но теперь упёрся в алхимию, сериализация полей занимает 700мс 😄
Читать полностью…
если у нас тормозит хождение в субд, то алхимия как будто ещё одно лишнее звено
Читать полностью…
кстати. А дайте больше контекста насчёт условий и окружения:
1) Есть ли ограничение на число задействованных цпу? Вы трединг упоминали — я предположил, что ограничения нет
2) Почему вы упомянули под ограничение про 500+ строк кода? Моя гипотеза о том, что "простая задача должна решаться просто" является домыслом
да, я в какой-то момент что-то заметно ускорил попросив адаптер базы не парсить datetime
Читать полностью…
Ну я бы на шаринг не уповал сильно — среда не обязана его гарантировать
Насчёт компактных представлений / компактных индексов неистово плюсую
у меня когда "грузим всю БД раз в 30 секунд в память процесса" стало жрать много памяти, я стал грузить данные в bytearray и на ходу с ними байтоёбствовать %)
Читать полностью…
предположения:
1) реально данные меняются сильно реже, чем раз в 15 секунд
2) когда данные меняются, они меняются мало и точечно
Если хоть одно из предположений работает — ты получишь выигрыш
я же тебе говорил — преобразуй полную перезагрузку в событийную работу с диффами
Читать полностью…
мне интересно почему gc впринципе пошел эти обьекты обходить
Читать полностью…
этот gc для того чтобы циклы ловить, если не делать циклов, то много не натечёт, большинство объектов в питоне освобождаются через обычный рефкаунт
Читать полностью…
Специально для таких хитрожопых случаев в питоне есть gc.disable()
вот этот ассайнмент это не циклический gc, это рефкаунт. в расте было бы так же
Читать полностью…
ну как-то так надо
def build(self):Читать полностью…
gc.disable()
try:
tree = algorithm()
finally:
gc.enable()
self._tree = tree
gc.freeze()