LINUX.ORG.RU
ФорумTalks

ненависть: Python-libxml деструкторы

 , , , ,


0

4

Имеется популярнейшая библиотека работы с XML - libXML2.

Биндинги для неё есть для практически всех скриптовых языков. Есть они и для Python.

http://xmlsoft.org/python.html

смотрим пример кода

import libxml2, sys

doc = libxml2.parseFile("tst.xml")
if doc.name != "tst.xml":
    print "doc.name failed"
    sys.exit(1)
root = doc.children
if root.name != "doc":
    print "root.name failed"
    sys.exit(1)
child = root.children
if child.name != "foo":
    print "child.name failed"
    sys.exit(1)
doc.freeDoc()

разглядываем приведенный пример и задумываемся над последней строкой.

ХГМ.

Поскольку у Python «имеется» прекраснейшая возможность писать деструкторы к скалярам, то вот такая выдержка из документации имеет место быть:

Also note the need to explicitly deallocate documents with freeDoc() . Reference counting for libxml2 trees would need quite a lot of work to function properly, and rather than risk memory leaks if not implemented correctly it sounds safer to have an explicit function to free a tree. The wrapper python objects like doc, root or child are them automatically garbage collected.

Изучая эту библиотеку подробнее - выходим на прекрасные функции

  • freeDoc
  • xpathFreeContext
  • и так далее

Расскажите мне почему нормальные деструкторы программисту не нужны.

★★

Последнее исправление: leave (всего исправлений: 2)

Расскажите мне почему нормальные деструкторы программисту не нужны.

Лучше расскажи нам, почему ты просто не оставишь Питон в покое и не продолжишь ублажать себя Перлом. Начальник заставил изучать Питон под угрозой увольнения за профнепригодность?

Deleted
()

Как ты собрался использовать деструктор в языке с автоматическим управлением памятью?

Deleted
()
Ответ на: комментарий от Deleted

мне дали 20 миллионов рублей под условие что я за 4 года начну писать на питоне.

вот сижу учу

цель: научить кучу людей разрабатывать архитектуру приложений правильно :)

rsync ★★
() автор топика
Последнее исправление: rsync (всего исправлений: 1)

Сделай класс у которого определи __del__ когда за ним придёт gc он его вызовет, или напиши с помощью contextliba прослойку для поддержки оператора with что не сделал автор этой либы

rikimaru
()
Последнее исправление: rikimaru (всего исправлений: 1)

Вместо деструкторов в питоне есть менеджеры контекстов в связке с ключевым словом «with» (см https://docs.python.org/2.5/whatsnew/pep-343.html )

То, что биндинг libxml этого не поддерживает - это не питона проблема

Кстати, а стандартные (см https://docs.python.org/3/library/markup.html ) питонячьи парсеры xml тебе точно не подходят?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Вместо деструкторов в питоне есть менеджеры контекстов

я просил рассказать «почему нормальные деструкторы не нужны разработчику?»

rsync ★★
() автор топика
Ответ на: комментарий от rsync

я просил рассказать «почему нормальные деструкторы не нужны разработчику?»

Для высвобождения памяти есть сборка мусора, для высвобождения прочих ресурсов (файловых дескрипторов, к примеру) в 99.9% случаев хватает слова «with». В чем проблема?

Manhunt ★★★★★
()
Ответ на: комментарий от rsync

Но ты ведь в прошлых тредах говорил, что тебе дали команду питонистов и ты ими командуешь. Концепция уже успела поменяться?

Deleted
()
Ответ на: комментарий от rsync

цель: научить кучу людей разрабатывать архитектуру приложений правильно :)

Так ты слона не продашь. Если ты УЖЕ не собираешься понимать как работает Python, то толку не будет. Ты как чувак который рассказывает что лошади лучше автомобилей...

dem ★★
()
Ответ на: комментарий от rsync

мне дали 20 миллионов рублей под условие что я за 4 года начну писать на питоне.

Гугл? Я думал они на Go всё переписывают с Питона.

Deleted
()
Ответ на: комментарий от dem

Если ты УЖЕ не собираешься понимать как работает Python

что значит не собираюсь? собираюсь и понимаю. эту всю жесть разгребаю.

копаться в говне за деньги - можно получать от этого удовольствие - не каждому дано

rsync ★★
() автор топика
Ответ на: комментарий от rsync

Некто даёт тебе, совершенно не знающему Питона, 20 млн рублей и команду питонистов, чтобы ты изучал язык и командовал питонистами?

Даже не знаю, что тут не сходится XD

Deleted
()
Ответ на: комментарий от Deleted

Некто даёт тебе, совершенно не знающему Питона, 20 млн рублей и команду питонистов, чтобы ты изучал язык и командовал питонистами?

1) Больные люди 2) Попил, а свалят на него...

dem ★★
()
Ответ на: комментарий от rsync

с того что много видел НЕ жести

Мы все еще ждем примеры.

dem ★★
()
Ответ на: комментарий от Deleted

мы на перле делали на четырех серверах ту же задачу, что большая корпорация делала на более чем 700 на си и питоне

тем и заинтересовали

rsync ★★
() автор топика
Последнее исправление: rsync (всего исправлений: 1)
Ответ на: комментарий от rsync

1) Пруф. 2) Я на питоне делал много вещей которые большая компания не могла сделать годами и тратила по 20 лямов...

dem ★★
()
Ответ на: комментарий от Deleted

не перл конечно, а архитектура: очереди, аггрегаторы, итп

теперь вот ее переносим на петон

rsync ★★
() автор топика
Ответ на: комментарий от rsync

Почему они не нашли для этого команду квалифицированных людей? Ты кричал и бил в грудь, что освоишь Питон и справишься с задачей?

Deleted
()
Ответ на: комментарий от Deleted

Вероятно, он единственный, кто хоть как-то ориентируется в гениальной write-only перловке с очередями и аггрегаторами :D Так что без него «перенести её на питон» никак не получится. Если бы был наглее, мог бы в дополнение к руководящей должности выторговать у работодателя на эти 4 года ещё и двух full-time минетчиц (блондинку и брюнетку).

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от Manhunt

В таком случае разумнее было бы назначить его консультантом, чтобы он переводил питонистам с перловского на человеческий) А не давать ему писать код на Питоне. Это же попадает под статью о жестоком обращении с об истязаниях.

Deleted
()
Ответ на: комментарий от Deleted

квалифицированные люди делали решение на 700 серверах а мы на четырех

rsync ★★
() автор топика

libXML2

Так это же биндинг к сишной либе, в которой управление памятью явное.

EXL ★★★★★
()
Ответ на: комментарий от urandom

Если этот биндинг входит в стд. библиотеку Python, то да – виноват в этом Python. Точнее его авторы.

EXL ★★★★★
()
Ответ на: комментарий от EXL

почему-то биндинги этой либы к другим языкам не требуют деаллоцировать память вручную.

видимо другие языки «менее» идеальны, да?

rsync ★★
() автор топика
Ответ на: комментарий от EXL

Вот биндинг для Java, в которой тоже нет нормальных деструкторов

в нем смогли не напрягать пользователя своими проблемами?

если да, то питон даже хуже Java

rsync ★★
() автор топика
Ответ на: комментарий от rsync

Ну это к качеству реализации биндинга. Мне так и никто не ответил на вопрос, идёт ли этот биндинг к libxml2 в стандартной поставке Python или нет.

EXL ★★★★★
()

еще что напрягает в питоне: то что постоянно меняется API в том числе стандартных модулей.

вместо libxml2 попробовал поюзать std - xml.etree.ElementTree

find('//note')

ругается так:

This search is broken in 1.3 and earlier, and will be fixed in a future version. If you rely on the current behaviour, change it to './/note'

в документации

path is a string having either an element tag or an XPath

Чтение они отложили на потом. А пока подставляйте точку в начале.

Скобки тоже не поддерживает. и выбирай:

  • либо нормальные XPath + ручное управление памятью
  • либо стд модуль, но кастрировано и навелосипедено

Python такой классный!

rsync ★★
() автор топика
Ответ на: комментарий от rsync

либо нормальные XPath + ручное управление памятью

lxml, про который уже сказали выше, вроде с нормальными XPath и без ручного управлению памятью.

EXL ★★★★★
()
Ответ на: комментарий от rsync

Стандартная библиотека, когда нужно что-то выходящее за рамки базовых сценариев, и правда бывает убога.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

а базовый сценарий - «изучить что навелосипедили НЕСТАНДАРТНОГО в стандартной библиотеке»?

типа добавим в XPath какую-то точку в начало и предупредим что «когда-нибудь» мы это исправим.

это нормальное поведение СТАНДАРТНОЙ библиотеки Python!

rsync ★★
() автор топика
Ответ на: комментарий от Manhunt

в перле есть нормальный LibXML2

а запроса чтоб именно pure у меня нет.

rsync ★★
() автор топика
Ответ на: комментарий от rsync

скобки не поддерживает, варианты не поддерживает

Странно. В xpath я практически не разбираюсь, но вот тут - https://lxml.de/xpathxslt.html - пишут: «lxml supports XPath 1.0, XSLT 1.0 and the EXSLT extensions through libxml2 and libxslt in a standards compliant way».

Manhunt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.