Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Сериализация в Python. Почему так много модулей?

#python #сериализация


Я мало знаком с сериализацией. Вот что я понял:
Есть пакеты, удобные для человека json, есть пакеты, удобные для хранения в Python
- pickle. Есть межязыковые пакеты - protobuf.
Ну три модуля должно бы хватить?
Когда я открыл PyPi с поисковым вопросом 'serialization' - я получил 4+ страницы
модулей. Например  protobuf имеет 3 модуля... 
Итак 2 вопроса.
1. Почему dill например, не совместили с pickle?
2. Можно ли обойтись 3-4 стандартами на все случаи жизни? Если нет - то какова причина
такого разнообразия модулей? 
    


Ответы

Ответ 1



По-моему нет смысла бороться с эволюцией и естественным отбором. Хорошие, удобные, эффективные, etc. модули вытеснят те, которые им проигрывают. Пример из моей рабочей жизни: около 2 лет назад я выбрал для себя, как мне тогда казалось, идеальный модуль - HDF5 (PyTables) для быстрой и удобной (де-)сериализации данных в Pandas. Несколько позже появилась новая библиотека - Feather Format (Apache Arrow), которая значительно быстрее HDF5, но в ней отсутствуют такие например вещи как чтение с диска по индексу. Теперь в зависимости от задачи я выбираю либо HDF5 (если мне надо обрабатывать наборы данных, которые не помещаются в памяти) или Feather если мне надо быстро читать/писать полный набор данных (который помещается в памяти). Вполне возможно, что в будущем в Feather Format добавят доступ по индексу или появится другая еще более крутая библиотека и я с удовольствием перейду на неё. Сейчас я изучаю Apache Spark и там точно такая же ситуация - единого стандарта нет и постоянно появляется что-то новое. Некоторые из этих новых форматов выживают и вытесняют устоявшиеся "стандартные" форматы, другие же новые форматы просто вымирают... Если бы был один незыблемый формат, то не было бы никакого развития и усовершенствования.

Ответ 2



Потому, что модули пишет и публикует на PyPI не одна какая-то организация, а множество независимых программистов со всего мира. Каждый из них имеет своё видение какой-либо области, включая сериализацию. Когда какой-то модуль с PyPI кажется мне неудобным или не полностью реализует мои потребности, я пишу свой и публикую.

Комментариев нет:

Отправить комментарий