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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 743
    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 743
    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 743
    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 743
    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.

+ 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