• Не пойму поведение type с weakref?

    Ivanhoe
    @Ivanhoe Автор вопроса
    Ответ такой.

    Внутри интерпретатора (CPython) каждый Python-объект представлен C-структурой PyObject (файл object.h), в которой одно из полей — ob_type, указатель на структуру _typeobject, котоая определяет «настоящий» тип объекта. type(x) и дескриптор object.__class__ обращаются за типом к этому полю. Но __class__ можно переопределить, что и делает weakref.proxy. При этом type(x) все равно будет продолжать обращаться к ob_type и результат его определения подменить не удастся.
    Ответ написан
    Комментировать
  • Как упростить конструкцию?

    AterCattus
    @AterCattus
    Люблю быстрый backend
    from contextlib import nested
    
    with nested(mock.patch(...), mock.patch(...), ...):
      ...
    тут

    А с python 2.7 вообще просто так:
    with mock.patch(...), mock.patch(...), ...:
        ... 
    
    Ответ написан
    1 комментарий
  • Python vs Perl

    Weageoo
    @Weageoo
    Python + Scrapy

    В pipelines.py в def open_spider(self, spider) открываем соединение с базой, в def close_spider(self, spider) закрываем.
    Для каждого сайта — свой паук (класс в .py-файле). Система продуманная, можно результаты парсинга развернуть даже в виде веб-сервиса встроенными средствами.
    Ответ написан
    Комментировать
  • Глобальный импорт модулей в Python

    @MikhailEdoshin
    from parent import _mysql. Можно также просто повторно импортировать _mysql, это вернет уже импортированный модуль из sys.modules. В Python у каждого модуля свое пространство имен, модули между собой никак не пересекаются, и это считается feature, а не bug. Импортировать _mysql даже правильнее, если родительский модуль ничего к нему не добавляет — это явно дает понять, что мы имеем дело с общим _mysql, а не с тем, что в родительском модуле называется _mysql.
    Ответ написан
    3 комментария
  • Сжатие JSON

    neyronius
    @neyronius
    Если вы включите GZip сжатие при отдаче с сервера, то получите тоже самое, но прозрачно — архиватор построит частотное дерево для повторяющихся строк и заменит каждую из них несколькими битами.

    Использование найденного вами подхода также ограничивает формат данных — все записи должны иметь одинаковую структуру.
    Ответ написан
    2 комментария
  • Сжатие JSON

    pletinsky
    @pletinsky
    Нет — это не экономия на спичках. Это гораздо хуже — совмещение ответственности по формату данных с ответственностью по сжатию данных. Это чревато массой не очевидных проблем, связанных с обработкой таких данных.

    Если рассматривать данный подход как некую контентозависимую архивацию — то он имеет право на жизнь. Но его эффективность нужно сравнивать с другими решениями — для бинарных данных (контентонезависимыми) и текстовых. Сравнивать необходимо выигрышь при сжатии и скорость архивации и разархивации. Даже если вы и выиграете — конечно только в специфическом json — врятли в типичном. А чтобы еще и овчинка стоила выделки (то есть разница со стандартными архиваторами имела бизнес значение на проекте) — по моему нужно совсем какие то экзотические условия.

    Но я могу и ошибаться — вы можете провести исследования и проверить.
    Или используйте готовые решения для сжатия текстовых данных.
    Для xml в отличие от json — есть сжатие специфическое для xml над сжатием текста — там с этим намного проще.
    Ответ написан
    Комментировать
  • Как определить, темный ли цвет?

    sledopit
    @sledopit
    RGB → HSL.
    Инструкций по способам конвертирования в интернетах пруд пруди.
    Ну а дальше дело техники.
    Ответ написан
    1 комментарий
  • Где найти людей для open-source проекта?

    Надо что-то делать и побольше показывать-рассказывать — например, написать статью на хабре с плюшками и уникальностями и сказать, что для полного счастья не хватает дизайнера. И он появится
    Ответ написан
    Комментировать
  • Как организовать циклическую запись файлов на диск

    suxarik
    @suxarik
    Самый простой вариант: в шедулере сделать таск, который бы раз в 5 (1,10,...) минут запускал простой скрипт, который бы получал сегодняшнюю дату и свободное место на диске. Если свободное место меньше необходимо размера то проходился бы по всем файлам в указанной директории и удалял бы те что старше (2,3,4,...) дней
    Ответ написан
    5 комментариев