IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

XML (Python vs Java)


Sujet :

Python

  1. #1
    Membre tr�s actif
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Par d�faut XML (Python vs Java)
    Bonjour,

    Je travaille sur des documents XML assez volumineux, je dois proposer une solution technique pour remplacer le processus actuel qui prend beaucoup de temps (jusqu'� 5h de traitement pour un document xml), et j'h�site entre deux langages Python et Java.

    Pourriez-vous m'aider et me dire lequels des deux et plus performant, juste au niveau performance avec le traitement des XML, sans prendre en compte la lisibilit� du code, ou la portabilit� ....

    Je vous remercie par avance.

  2. #2
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 774
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 774
    Par d�faut
    Salut,

    Telle que pos�e, la question n'a pas trop de sens.

    Avec Java, une biblioth�que XML sera probablement �crite en Java.
    Avec les versions r�centes de Python, les biblioth�ques standards proposent du Python (lent) ou en C.

    Apr�s vous pouvez prendre une libxml2 et utiliser la m�me librairie avec Python/Java: il suffit d'installer le "binding".
    Dans ce cas, le temps CPU consomme d�pendra des traitements "pur" Java ou "pur" Python et a traitement �quivalents Python sera probablement moins bon.

    une solution technique pour remplacer le processus actuel qui prend beaucoup de temps (jusqu'� 5h de traitement pour un document xml), et j'h�site entre deux langages Python et Java.
    "le temps CPU consomme" d�pendra du temps passe a attendre les fins d�entr�e sortie: 5h c'est long mais si vous passez 95% du temps
    a attendre la fin des ES, changer de langage sera beaucoup de boulot pour rien. Des disques plus rapides (on fait du SSD pas cher) permettra d'obtenir des r�sultats rapidement, pour quelques centaines d'Euros de matos

    => La question est de savoir comment sont stresses CPU, Memoire et IO durant ces 5h.

    Si c'est 80% de temps CPU, il faudrait peut �tre revoir les algos, les flux de traitements, parall�liser,...
    Et se poser la question du langage "apr�s".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par d�faut
    Bonjour

    Je n'irais pas jusqu'� dire que la question n'a pas de sens, par contre, elle rel�ve beaucoup de pi�ge.

    Si j'ai bien compris, le premier probl�me, c'est une analyse de fichier XML qui prend 5h, cela parait trop long. Est-il possible de quantifier la taille des donn�es d'entr�es XML pour que le lecture du forum puisse comparer ces r�sultats a son exp�rience ? Dans mon cas, lecture de fichier XML en python avec ElementTree, je n'ai jamais eu le moindre de soucis de performance pour des fichiers de 10 000 lignes, le traitement m'a toujours paru quasi instantan�e.

    En g�n�ral, quand un traitement est trop long, la premi�re question � se poser est : est-ce que l'algorithme utilis� est le bon ? et indirectement pourquoi c'est long ? La r�ponse peut-�tre, en autre, qu'il s'agit d'acc�s E/S long, et effectivement dans ce cas, c'est plut�t vers du changement de hard qu'il faut s'orienter. Dans tous les cas, quelques informations sur ce point aidera � apporter les bons �l�ments de r�ponse. Par exemple, vu mon exp�rience, j'ai du mal � croire que la simple lecture de donn�es XML puisse prendre 5h, sauf si les donn�es sont gigantesques, et alors en g�n�ral l� on est soumis � un probl�me de m�moire, ce qui d�clenche le swap, et alors ralentie �norm�ment le traitement. Dans ce cas, il faut revoir l'algorithme pour traiter les donn�es par petit lot. Bien sur, sans plus de pr�cision, tout cela ne sont que des sp�culations.

    Maintenant admettons que l'algorithme utilis� soit le bon et qu'il s'agit surtout de charge CPU.
    Quand on souhaite changer de langage de programmation pour acc�l�rer un traitement, en g�n�ral on �tudie la question du C/C++ plut�t que Python ou Java. Est-ce que cette piste a �t� �tudi�e ? Si oui, pourquoi elle �t� �cart�e ? Ces raisons aideront � trouver la bonne solution entre le Java et Python.

    Dernier point, il est demand� de ne se prononcer que sur l'aspect performance, et je l'admet je me prononce un peu pr�s sur tout, sauf sur cela. Mais tr�s souvent dans ce genre demande on passe � cot� d'autre probl�matique qui ont pour cons�quence que les performances souhait�es ne sont pas atteintes. Quel est le niveau en Python ou Java du d�veloppeur ? Est-ce que le d�veloppeur devra apprendre le langage durant ce projet ? Est-ce que le d�veloppeur aura tout son temps pour optimiser la solution ou est-ce que le projet � une dead-line ?

    Avec tous ces �l�ments, il sera possible d'apporter des r�ponses qui orienteront dans la bonne direction.

    Cordialement
    Emmanuel

  4. #4
    Membre tr�s actif
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Par d�faut
    Je vous remercie pour vos r�ponses.

    Pour information le fichier XML qui prend 5h est un fichier de plus de 1 million de lignes et le traitement comprend la lecture, la mise en forme et l��criture sous forme de fichier .xls (puisque le but de l'outils et r�cup�rer les donn�es du fichier xml et les mettre dans un fichier xls).

    Actuellement c'est un code Matlab qui pose pas mal de probl�mes a cause d'une surcharge d�espace m�moire Java au moment de la lecture.

    En ce qui concerne le Hard aucune modification n'est possible malheureusement.

    Pour l'outil actuellement c'est un outil que j'ai repris pour am�lioration, et donc j'ai suivi l'algorithme de base, une optimisation du code me fera gagner peut �tre 2h mais c'est toujours pas suffisant et �a va prendre du temps, alors si je dois re-coder je pr�f�re partir sur un autre langage plus puissant.

    Ce qui concerne les d�veloppeurs moi je peux me remettre en python et un ami qui connais bien Java, on h�site encore sur quoi partir

    Cordialement

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 774
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 774
    Par d�faut
    Citation Envoy� par autousto Voir le message
    Actuellement c'est un code Matlab qui pose pas mal de probl�mes a cause d'une surcharge d�espace m�moire Java au moment de la lecture.
    Il faudrait voir combien de RAM cela consomme.
    Intuitivement, il faut pouvoir d�couper en N tranches le cycle (1) tout charger en m�moire (2) effectuer les traitements (3) produire les r�sultats.

    Citation Envoy� par emmanuel_dumas
    Je n'irais pas jusqu'� dire que la question n'a pas de sens, par contre, elle rel�ve beaucoup de pi�ge.
    La question n'a pas de sens car le temps de traitement d�pend de la possibilit�/capacit� d'organiser les traitements pour utiliser au mieux les ressources CPU, M�moire, IO disques disponibles.

    C'est une question de conception, de "design" de la solution dans laquelle le choix du langage de programmation est peu structurante.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre chevronn�
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par d�faut
    A vue de nez je dirais que votre programme matlab charge tout le document xml en m�moire avant de le transformer. On va dire que c'est l'approche dom, c'est tr�s pratique quand on veut naviguer dans les noeuds du document.

    L'autre approche qui est plus appropri�e dans votre cas est la lecture �v�nementielle / sax : on parcourt le document, chaque changement de noeud l�ve un event et on traite ainsi le document petit � petit.

    Etape 1 : chercher un moyen de faire un parsing sax en matlab sans conserver le document complet en m�moire
    Etape 2 : si 1 ne fonctionne pas, recoder. Ce sera vos comp�tences dans Java ou Python et l'int�gration avec le reste de votre appli qui vous dicterons le choix car cela devrait avoir peu d'incidence sur la performance du parsing.

  7. #7
    Expert confirm�
    Avatar de tyrtamos
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2007
    Messages
    4 486
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par d�faut
    Bonjour,

    Je ne connais pas bien ce sujet, mais je crois qu'il existe une autre solution pour acc�l�rer: utiliser les fonctionnalit�s XML (sax et dom) de la biblioth�que graphique PyQt4 (je suppose qu'elles existent encore sous PyQt5).

    L'avantage serait:
    - �crire facilement la logique d'ensemble en Python
    - et faire appel aux fonctions XML rapides, puisqu'�crites en C++

    Bien que ce soit une biblioth�que graphique, on peut utiliser ses fonctionnalit�s sans graphique en console si on le souhaite.

    Ce qui n'emp�che pas, bien entendu, les diff�rentes analyses propos�es dans les messages pr�c�dents.

  8. #8
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 774
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 774
    Par d�faut
    Salut,

    Python, Java et Qt sont des frameworks assez complets pour inclure des librairies XML qui sachent faire du DOM ou du SAX. Ils sont aussi assez ouverts pour permettre l'utilisation de librairies externes (comme libxml2) si n�cessaire cote fonctionnalit�s ou performances.

    Comme le programme existant ne fait pas que "lire" un fichier XML, si tant est que passer de DOM a SAX soit un �l�ment de la solution, changer de "framework", c'est r�-�crire tout le programme !

    SAX permettrait de lisser la charge cote "m�moire" de la phase de lecture mais un fichier XML peut �tre beaucoup plus complique a parser qu'un fichier CSV.

    Comme le PO n'a pas donne beaucoup de d�tails sur la structure de son fichier XML difficile de savoir...

    De plus passer de DOM a SAX pour parser les gros fichiers XML est une piste qui se trouve assez vite des qu'on cherche un peu... si le PO se pose �ventuellement la question de changer de framework, on peut esp�rer qu'il a d�j� explore cette piste (quoi que...).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre tr�s actif
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Par d�faut
    Dans Mtlab on a pas le Sax et Dome. on a d'autre fonctions pour parser les fichiers XML.

    Ce qui concerne le choix de la librairie, bah vu que j'ai des probl�mes de m�moire je vais pas m'amuser a charger un fichier de 40M comme c'est d�j� le cas sur Matlab.

    Donc effectivement je vais utiliser Sax, et traiter le document par partie.

    Je vous remercie pour vos r�ponses.

    Ps: wiztricks le [(quoi que...) && (la question n'a pas trop de sens)] n'aide pas trop pour apporter une r�ponse a la question.

  10. #10
    R�dacteur/Mod�rateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance m�catronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Freelance m�catronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par d�faut
    Citation Envoy� par autousto Voir le message
    Dans Mtlab on a pas le Sax et Dome
    Premi�re ligne de la documentation de la fonction xlsread de MATLAB :
    Read XML document and return Document Object Model node
    Sinon pour SAX, MATLAB est normalement fourni avec une version Java de Xerces (xercesImpl.jar) dans le sous-dossier /java/javaext du dossier d'installation de MATLAB.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    >> import org.apache.xerces.parsers.SAXParser
    >> sax = SAXParser()
     
    sax =
     
    org.apache.xerces.parsers.SAXParser@3ed024df
     
    >> methods(sax)
     
    Methods for class org.apache.xerces.parsers.SAXParser:
     
    SAXParser                 endElement                getEntityResolver         separator                 startDTD                  
    any                       endExternalSubset         getErrorHandler           setContentHandler         startDocument             
    attributeDecl             endGeneralEntity          getFeature                setDTDContentModelSource  startElement              
    characters                endGroup                  getProperty               setDTDHandler             startExternalSubset       
    comment                   endParameterEntity        hashCode                  setDTDSource              startGeneralEntity        
    doctypeDecl               equals                    ignorableWhitespace       setDocumentHandler        startGroup                
    element                   externalEntityDecl        ignoredCharacters         setDocumentSource         startParameterEntity      
    elementDecl               getAttributePSVI          internalEntityDecl        setEntityResolver         textDecl                  
    empty                     getAttributePSVIByName    notationDecl              setErrorHandler           toString                  
    emptyElement              getClass                  notify                    setFeature                unparsedEntityDecl        
    endAttlist                getContentHandler         notifyAll                 setLocale                 wait                      
    endCDATA                  getDTDContentModelSource  occurrence                setProperty               xmlDecl                   
    endConditional            getDTDHandler             parse                     startAttlist              
    endContentModel           getDTDSource              pcdata                    startCDATA                
    endDTD                    getDocumentSource         processingInstruction     startConditional          
    endDocument               getElementPSVI            reset                     startContentModel
    Apr�s je ne connais ni Xerces, ni SAX, je ne peux donc pas me prononcer plus...

  11. #11
    Membre �prouv�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par d�faut
    Pour les gros XML, il faut �viter SAX/DOM qui charge tout le document XML et pr�f�rer des solutions comme StAX (existe en java, sous python je sais pas) qui streame le document XML de balise en balise ...

    Avec StAX sous java, j'arrive sans probl�me � parcourir des shapefiles (fichiers "GPS" en XML) de 5Go en moins de 5 minutes.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [DOM] [D�butant(e)] �crire sur un fichier XML � partir de java
    Par Samanta dans le forum Format d'�change (XML, JSON...)
    R�ponses: 11
    Dernier message: 05/02/2008, 11h13
  2. [XML]XQuery avec Java
    Par vero59 dans le forum Format d'�change (XML, JSON...)
    R�ponses: 14
    Dernier message: 11/08/2005, 09h36
  3. [XML-DOM][XSD][JAVA] G�n�ration de parseur
    Par charlot44 dans le forum Persistance des donn�es
    R�ponses: 2
    Dernier message: 22/06/2005, 12h36
  4. Python VS Java
    Par AstraX dans le forum Langages de programmation
    R�ponses: 12
    Dernier message: 04/07/2004, 17h13
  5. R�ponses: 4
    Dernier message: 22/01/2004, 08h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo