Menu

#7 str(html.tag) č troppo lenta per documenti grandi

closed-accepted
5
2003-09-03
2003-08-28
Anonymous
No

es.
---
mytag = html.tag('gino', '')
mytag << html.tag(...)
mytag << html.tag(...)
....(MOLTE volte)
print str(mytag)
return True
---

se tento di fare str(mytag) e mytag č, per esempio, un
documento xml di 7 MB (causa rifiuti, sic!), mi tocca
aspettare una decina di minuti prima di avere l'output.

il problema parrebbe stare nel metodo __str__ di
html.tag che concatena ricorsivamente tutto il mondo
allocando tutto il mondo

Discussion

  • Mario Frasca

    Mario Frasca - 2003-09-01

    Logged In: YES
    user_id=512199

    il problema causato dal fatto che nella __str__ mi
    appoggio completamente alla furbizia del python per la
    gestione delle stringhe ed in particolare la loro
    concatenazione. se la ricorsione la realizzassi a mano
    all'interno di una funzione operante iterativamente, potrei
    ottimizzare l'operazione. alternativamente, si potrebbe
    esplorare l'appoggiarsi a libxml2.

    al margine:

    questa potrebbe essere l'occasione di riconoscere che in
    html.py si fa del lavoro generico e solo nelle classi
    derivate da html.tag si scende nello specifico html.

    magari sarebbe meglio scindere html.py in xml.py e html.py,
    la prima definirebbe la classe xml.tag, l'altra tutte le
    html.page, html.input, html.select, ...

     
  • Mario Frasca

    Mario Frasca - 2003-09-03

    Logged In: YES
    user_id=512199

    __str__ ora accetta un secondo parametro 'result' (defaults
    to None) che, a regime, contiene una lista di stringhe, a
    cui la __str__ aggiunge il suo output.
    alla fine la sola __str__ che era stata chiamata con
    result=None restituisce un valore - cio ''.join(result).
    le altre avranno avuto il solo effetto collaterale sul
    contenuto della lista.

     
  • Mario Frasca

    Mario Frasca - 2003-09-03
    • assigned_to: nobody --> mfrasca
    • status: open --> closed-accepted
     

Log in to post a comment.