Tishka17
А почему не протобуф?
Roman
А почему не протобуф?
Потому что он не zero-copy под C++, да там и других проблем хватает.
Tishka17
А. Окей
Tishka17
В общем, если интересно, можешь глянуть мою либу. У нас с машумару фичи немного разные, вдруг тебе подойдёт. Но конечно из коробки она в блоб не сериализует
Roman
Я не уверен, но кажется для всяких жсонов и прочего он все равно сначала словарь делает
def from_msgpack(...): return cls.from_dict( decoder(data, **decoder_kwargs), **dict(DEFAULT_DICT_PARAMS, **dict_params) )
Tishka17
Привет! Помнится я писал о том, чтобы вытащить msgpack в extras, так вот теперь он мне понадобился :) У меня есть два приложения (на C++ и Python), которые взаимодействуют между собою по ZeroMQ (шлются большие объёмы данных и часто, поэтому производительность и пропускная способность важна). Хочу использовать эту либу для сериализации/десериализации в msgpack/обратно (который шлётся через ZeroMQ). У меня на одном сокете могут быть сообщения разных типов, и, соответственно, с разными данными внутри. Я думал сделать что-то типа: @dataclass class Message(DataClassMessagePackMixin): protocol_version: int message_type: MessageType # IntEnum data: Union[DataA, DataB, ...] Но потом увидел, что Union стоит только в планах. Можно, конечно, просто dict в msgpack.packb запихивать, но хочется использовать преимущества статического определения типов сообщений. Посоветуйте, пожалуйста, альтернативное решение.
https://github.com/Tishka17/dataclass_factory/issues/15 может эти примеры ещё пригодятся
Tishka17
def from_msgpack(...): return cls.from_dict( decoder(data, **decoder_kwargs), **dict(DEFAULT_DICT_PARAMS, **dict_params) )
Выглядит как будто иерархия не поддерживается
Roman
Выглядит как будто иерархия не поддерживается
Я к тому, что там тоже через словарь)
Tishka17
А. Угу
Tishka17
Да скорее всего у него тоже работает, просто логика инита немного другая видимо
Tishka17
А у тебя поддерживается?
Да, из-за этого либа и появилась
Roman
https://github.com/Tishka17/dataclass_factory/issues/15 может эти примеры ещё пригодятся
Посмотрел. Понял принцип, хотя, немного сложно, конечно. Спасибо!
Tishka17
Ну это если нужен полиморфик
Tishka17
Посмотрел. Понял принцип, хотя, немного сложно, конечно. Спасибо!
Ну я щас эту хелпер функцию в либу втащу, чтобы проще было
Tishka17
А так Юнион вообще сразу работает если поля разные
Tishka17
Хз уже как апи упростить, много фич копится, все не впихнешь удобно
Tarrac
подскажите, почему не заканчивается рекурсия? https://dumpz.org/ak5M5n3dxnnc
Tarrac
не пойму, где ошибся
Roman
А так Юнион вообще сразу работает если поля разные
Ааа... Мне кажется, что у меня так и будет. Попробую.
Tishka17
Но явная проверка типа должна быть быстрее, иначе он будет целиком пытаться распарсить всё
Tarrac
я проверяю, есть ли на странице ссылки на нужные файлы и если нет - иду на следующую страницу
Tarrac
на третьей странице ссылки есть, значит все, надо return делать
Roman
Но явная проверка типа должна быть быстрее, иначе он будет целиком пытаться распарсить всё
Если у меня полей немного, просто есть большие (blob картинки на сотни килобайт), то это же по идее не должно быть проблемой? Там же надеюсь, copy/deepcopy не используется?
Tishka17
1. Не надо локальные переменные называть с чёрточки 2. Урлы парсят на части не так. Рискуешь огрести проблемы на чем-то типа "http://ya.ru/file.zip?secret=1/2" 3. Два раза генераторные выражение в лист конвертишь? Зачем? Можно просто скобки поменять на квадратные 4. Непонятно зачем здесь рекурсия, а не цикл 5. Ты вообще уверен, что оно реально разные страницы получает?
Tishka17
От машумару отстаю по скорости где-то на 10%
Roman
Не. Никаких копи
Ну я так и думал, просто на всякий случай спросил. Ну тогда должно всё быстро быть.
Roman
От машумару отстаю по скорости где-то на 10%
Я думаю, что не это будет узким местом, так что это очень даже ОК.
Tishka17
Я с его подачи упоролся по оптимизации, но так и не смог догнать целиком
Tishka17
подскажите, почему не заканчивается рекурсия? https://dumpz.org/ak5M5n3dxnnc
Как думаешь, что будет напечатано? a = (x for x in range(10)) print(len(list(a))) print(len(list(a)))
Tarrac
10
Tishka17
10
Там два принта
Tarrac
блин
Tarrac
внезапно
Tishka17
Генераторы не многоразовые как бы
Amaro
Просто вместо круглых скобочек надо квадратные написать.
Alexander
Привет! Помнится я писал о том, чтобы вытащить msgpack в extras, так вот теперь он мне понадобился :) У меня есть два приложения (на C++ и Python), которые взаимодействуют между собою по ZeroMQ (шлются большие объёмы данных и часто, поэтому производительность и пропускная способность важна). Хочу использовать эту либу для сериализации/десериализации в msgpack/обратно (который шлётся через ZeroMQ). У меня на одном сокете могут быть сообщения разных типов, и, соответственно, с разными данными внутри. Я думал сделать что-то типа: @dataclass class Message(DataClassMessagePackMixin): protocol_version: int message_type: MessageType # IntEnum data: Union[DataA, DataB, ...] Но потом увидел, что Union стоит только в планах. Можно, конечно, просто dict в msgpack.packb запихивать, но хочется использовать преимущества статического определения типов сообщений. Посоветуйте, пожалуйста, альтернативное решение.
Надо бы добавить Union, это да
Alexander
У меня просто не было острой необходимости в нем
Alexander
Если Any подойдёт вместо Union, можешь им воспользоваться
Tarrac
Генераторы не многоразовые как бы
https://dumpz.org/ak5M5n3dxnnc я переделал. Так норм?
Tishka17
Tarrac
на первой странице может ничего не быть
Tishka17
И ещё: path в коде может вполне оказаться невалидным именем файла
Tarrac
от 0 до 10? _
Tishka17
Почему до 10?
Tishka17
У тебя рекурсия до 1000
Tishka17
Можешь и цикл так же
Tishka17
Или блин WHILE
Tishka17
def list_files(p): # код парсинга return [...] def find_files(): for i in itertools.count(): files = list_files(i) if files: return files
Tarrac
https://dumpz.org/ak5M5n3dxnnc переписал без рекурсии
Tarrac
^
Tarrac
ой
Tishka17
;-)
Tarrac
все, убрал рекурсию
Tishka17
Точно?
Arkhat
Как добавить звуковое уведомление на джанго в pythonanywhere
Tishka17
Чо
Tishka17
Я не понял как эти три вещи связаны
Arkhat
Использую pythoanywhere как сервак, звуковое уведомление должно поступить на фронте. Просто через js не получается
Nikita
Плохо делаешь видать
Tarrac
Точно?
да) оставил while
Tishka17
да) оставил while
Ты уверен?
Tishka17
Покажи код
Tarrac
https://dumpz.org/ak5M5n3dxnnc
Arkhat
Фронт прослушивает веб сокет. При появление пуша приходит алерт. Но звука нет так как не может найти сам файл звука. Он есть и ссылка вроде правильная, ошибка 403 выводит
Tishka17
Хотя смотря что ты считаешь уведомдением
Tishka17
А
Tarrac
то, что я 2 раза пишу разные вещи в files сильно плохо?
Tishka17
403 - это не "не может найти"
Tishka17
то, что я 2 раза пишу разные вещи в files сильно плохо?
не сильно. Хуже чт оу тебя одна функция и парсингом занимается и поиском страницы какую распарсить
Tishka17
но так как 5 строк, пофиг