Michael
Да мля я ж сказал multiprocessing.Pool Pool.map_async
Я увидел, уже читаю, вроде оно, спасибо
Alex
футуры не катят, multiprocessing в требовании задачи
штааааа? а что по-твоему ProcessPool использует под капотом?
Michael
штааааа? а что по-твоему ProcessPool использует под капотом?
в душе ниезнаю, у меня нет опыта с паралелизмом
Tishka17
https://gist.github.com/aragaer/3e6c015cc702cf7198bed4f1e54e462a
сделал так: https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/dataclass_factory/path_utils.py
koder
в душе ниезнаю, у меня нет опыта с паралелизмом
это future не для потоков или асинка, это другие
Tishka17
https://gist.github.com/aragaer/3e6c015cc702cf7198bed4f1e54e462a
а вот как это юзается: https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/tests/test_path.py
Daniil
О, прикольно, спасибо
Aragaer
мм.. Ты кидаешь value error если в словаре ключом является инт
Aragaer
технически ты мог бы использовать инты для массивов, что угодно для словарей
Aragaer
но наверно да, если строже контролировать, будет лучше
Tishka17
технически ты мог бы использовать инты для массивов, что угодно для словарей
ну технически можно, но хз какой реальный кейс. Будут запросы, сделаю.
Unknown
а вот как это юзается: https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/tests/test_path.py
тебе вчера помогли задачу с dict решить реккурсией, можешь скинуть ссылку на gist, не могу найти
Unknown
да, не обратил внимания)
Aragaer
ну я все-таки считаю, что как только ты нашел первую точку, которая не существует, с этого момента можно дальше не искать, сгенерить остальной кусок и просто его вставить целиком
Tishka17
ну возможно, только это все равно делается один раз, а дальше deepcopy работает образца
Tishka17
о. придумал оптимизацию
Bogdan (SirEdvin)
Кстати, @Tishka17, может ты подскажешь, есть какой-то способ из openapi спеки сгенерировать marshmallow схемки? Я знаю про nadia, но она не очень умная, может есть что-то круче?
Bogdan (SirEdvin)
Эх, даже в наш просвещенный век все самому писать :(
Tishka17
блин. не прокатит оптимизация
Dmytro
Чуваки, бот на поллинге после отключения SSH тоже отключается. Че делотб?
Tishka17
пипец. Из-за этой фичи скорость упала в 15 раз
Dmytro
Как сделать так, чтобы после отключения сессии SSH он продолжал работать?
Tishka17
запускать нормально
Tishka17
через systemd, например, если это долгоживуший сервис, а не разовая фигня
Dmytro
через systemd, например, если это долгоживуший сервис, а не разовая фигня
спс, гляну. С линуксом до этого не работал прост, поэтому туплю
Alex
лучше сразу сделать нормальный сервис
Alex
плохой совет
denis ⛅️
+1
как легко распознать человека старше 25
Tishka17
def do0(): return { i: i for i in range(10) } orig = {} def do2(): res = deepcopy(orig) for i in range(10): res[i] = i return res второй метод работает в несколько раз медленее. Как можно ускорить?
Bogdan (SirEdvin)
Опциональным ключем?
Tishka17
полная версия кода: https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/dataclass_factory/serializers.py#L23
denis ⛅️
я обычно такие штуки решаю нумбой
denis ⛅️
ы
Bogdan (SirEdvin)
эм?
Мне казалось, что deepcopy нужен только в ряде случаев. Вот и включить опциональную логику для этого
Tishka17
ну у меня уже есть один if. В данном случае нужен именно deepcopy
Tishka17
это упрощенная версия кода просто
koder
или я не понял что именно оптимизировать
Tishka17
.update?
вообще там будет несколько словарей просто, поэтому такой код
Tishka17
очень плохой пример получился, да
Futorio
Скорее всего никак так как ты в первом случае создаёшь просто словарь, а во втором нужно обойти рекурсивно словарь и создать новый
Tishka17
orig = [{}] * 10 def do2(): res = deepcopy(orig) for d, i in zip(res, range(10)): d[i] = i return res
Tishka17
вот на самом деле правильный код
Aragaer
ээм
Tishka17
он ещё медленнее
Aragaer
тут у тебя список с 10 ссылками на один словарь
Tishka17
да, на самом деле это 10 ссылок на разные места в иерархии
Tishka17
просто лень в тесте воспроизводить
koder
да, на самом деле это 10 ссылок на разные места в иерархии
если тебе адски нужно максимально ускориться - генери код
Aragaer
а
Aragaer
ну и вместо зипа с рейнджом надо энумерейт
Aragaer
но не суть
Tishka17
ходить каждый раз по иерархии - ещё медленнее
koder
прямо разверни цикл через ast + compile
Tishka17
вариант конечно, но я хотел по максимуму это избежать
Aragaer
так, получается у тебя есть большой разветвленный словарь и есть массив ссылок в эту иерархию
Tishka17
да, я дла оптимизации это сделал
Aragaer
ты хочешь сделать клон этого словаря и в новой версии модифицировать эти места?
Tishka17
угу
koder
на самом деле не так сложно и не очень криво. На исходный текст, а именно ast. Зато будет максимально быстро. Но таки да, сложновастее
Aragaer
копировать без deepcopy не выйдет. Но тогда копировать надо всего один раз, нет?
koder
> https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/dataclass_factory/serializers.py#L34 я вот тут попой чую, что c - это хитрая ссылка на containers. Но понять это из кода не могу
Tishka17
ну при каждой сериализации данных, да
Aragaer
ну кстати...
Aragaer
ты можешь действительно хранить не "ссылки на места в иерархии", а "функции. которым можно скормить иерархию, и получить места"
Tishka17
ну с таким ссылками у меня 15 секунд, без них - больше 20. С плоским словарем - 1 секунда
Tishka17
эм
Tishka17
что это даст?
Aragaer
то есть надо функцию, которая принимает путь в иерархии и возвращает функцию, которая принимает иерархию, возвращает место