nyaload

Журнал Пушыстого

Журнал Пушыстого

Entries by tag: python

python namedtuple memory
nyaload
_winnie
В питоне есть namedtuple, тупл к полям которого можно обращаться привычным синтаксисом object.field

namedtuple лучше обычных туплов тем, что к полям тупла можно обращаться по имени, легко добавлять к типу новые поля и удалять.
namedtuple лучше словарей/объектов тем, что не расходуют память на имена полей в каждом объекте.

Использование такое:
Read more...Collapse )
Померял сколько памяти занимает миллион пар-туплов, с несколькими вариантами - словари, объекты, обычные туплы.

Read more...Collapse )
Вывод: namedtuple - хороший выбор по умолчанию для массивов однотипных объектов, если отказываться от синтаксиса object.field и от питона не хочется, а привязка к размеру и порядку полей в тупле вызывает тошноту и проблемы поддержки программы.

dobro_backup.py
nyaload
_winnie
Выкладываю питоний скрипт для бэкапов, который доделал сегодня.

Бэкап за каждую дату - выглядит просто как папка. Для того, чтобы не хранить терабайт в каждой папке по много раз при создании нового бэкапа создаются хардлинки в предыдущий бэкап. Старые папки можно смело стирать.
Для того, чтобы быстро считать md5 от файлов - в директорию сохраняется файл с посчитаными md5 и timestamps/size. Если timestamp/size файла не изменился, то верим что md5 тоже не поменялся.
Скрипт работает под Linux и Windows (под Windows даже есть оптимизированый os.walk через FindFirstFile).
Возможно, можно разобрать на запчасти для быстрого копирования директорий в production.

Cам скрипт: dobro_backup.py

Дублирую сюда usage и todoшки-недоделки:
Read more...Collapse )

Переопредели переопределение
nyaload
_winnie
Там, где в Java люди ради mock-тестирования пишут свой "интерфейс получения случайных чисел", свой "интерфейс файловой системы", "свой интерфейс получения времени" и "интерфейс вызова Sleep()" — программисты на питон просто заменяют в стандартном модуле стандартные функции файловой системы, случайных чисел или даты. В крайнем случае можно даже модуль целиком заменить ( sys.modules["time"] = my_object ), или переопределить функцию импорта модулей.

Сегодня порадовался такому диалогу:

Q: чуваки, я для тестирования переопределил стандартные дату и время, но в стороннем модуле стоит проверка isinstance(obj, datetime)! Что делать?

A: Не тормози, просто переопредели isinstance ( __builtin__.isinstance ) на свою функцию

?

Log in

No account? Create an account