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

Interfaçage autre langage Python Discussion :

Utilisation de Cython dans un projet PySide6 [Python 3.X]


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut Utilisation de Cython dans un projet PySide6
    Bonjour à tous,

    Je suis en train de travailler sur un projet PySide6 pour certains utilisateurs de mon entreprise.
    Le but de cette appli est de récupérer sur notre réseau des fichiers video, son et photo, d'en extraire les métadonnées voulues et de récupérer le résultat dans des fichiers séparés pour traitement ultérieur.

    Le projet en tant que tel fonctionne très bien, mais il pèche au niveau de la phase "Lecture des métadonnées".
    POur cela j'utilise PyMediaInfo et Pandas. Nous avons exclue ExifTool car il nécessite l'installation de Perl.

    J'ai créé une classe qui récupère les métadatas voulues, puis boucle sur tous les fichiers d'un répertoire (parfois plusieurs milliers) et renvoie le résultat sous forme de fichier excel, avec une sauvegarde pandas/csv.

    C'est à ce niveau là que l'application rencontre des lenteurs. Toute la logique se trouve dans une classe qui récupère les infos principales pour traitement.

    JE me demandais si je pouvais convertir ce fichier/classe en Cython pour augmenter ma vitesse de lecture/écriture des métadonnées?
    Peut-on convertir une classe python classique en Cython ou faut-il que je découpe ma classe ?

    Et plus concrètement aurais-je vraiment des résultats nettement supérieurs avec Cython.

    JE vous remercie pour votre aide.

    Bonne journée
    Douter de tout, toujours, et surtout de soi-même...

  2. #2
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut
    A titre d''information complémentaire, je voudrais préciser que j'utilise un QThreadPool dans ma classe.
    Avec Exiftool, j'obtiens un traitement de 600 fichiers en 2mn. Avec PyMediaInfo, c'est 5 mn...

    Une autre solution serait d'utiliser directement la bibliothèque native de mediaInfo qui est en C++, mais je ne sais pas comment elle peut être importée. Tant pour la version DLL que la librairie native en .so, il me semble
    Douter de tout, toujours, et surtout de soi-même...

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 142
    Points : 4 541
    Points
    4 541
    Par défaut
    bonjour
    Citation Envoyé par FadeToBlack Voir le message
    Et plus concrètement aurais-je vraiment des résultats nettement supérieurs avec Cython.
    Difficile à dire, c'est à toi de profiler ton application pour trouver les goulots d'étranglements

    parcourir les répertoires : cela ne va rien changer
    lecture des datas : pymediainfo est déjà une lib compilée
    Excel/pandas, je n'en parle pas

    Si j'enlève ces points, peut-être que le code python de cette classe ne représente plus que 15% du temps ?

    note: Cython c'est pour écrire une fonction (goulot d'étranglement), pas une classe aussi diverse.

    mais je ne sais pas comment elle peut être importée
    C'est justement ce que fait ta librairie pymediainfo (code source est disponible) il n'y a donc rien à gagner de ce coté
    $moi= ( !== ) ? : ;

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 858
    Points : 7 178
    Points
    7 178
    Par défaut
    Bonjour,

    Cython, permet d'améliorer les boucles en pur python dans ton code, et dans divers autres cas, créer son wrapper d'une librairie C n'existant pas...

    Ici, si l'utilisation de pandas et tes wrappers sont utilisés correctement, il n'y a pas lieu d'utiliser cython. Par exemple utiliser des boucles avec pandas n'est souvent pas une bonne idée...

    Comme indiqué par @papajoker, détecter les goulots d'étranglement, les isoler et essayer de comprendre pourquoi c'est plus lent que ça ne devrait est un premier travail minimal.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par FadeToBlack Voir le message
    Une autre solution serait d'utiliser directement la bibliothèque native de mediaInfo qui est en C++, mais je ne sais pas comment elle peut être importée. Tant pour la version DLL que la librairie native en .so, il me semble
    Récupérer les metadata, c'est lire quelques blocks de chaque fichier (donc non séquentiel).
    Pour donner des ordres de grandeur, lire sur un disque SSD est 10 fois plus rapide que lire sur un disque HDD qui est 1000 fois plus lent que les accès mémoires.

    Et pour aller plus vite, il faut savoir quel est le temps passé à attendre côté entrées sorties disques vs. temps de calcul.

    note: si on sait découper le boulot en pipeline, on peut utiliser les threads (l'asynchronisme des...) pour aller globalement plus vite... mais ajouter des threads n'importe comment n'aura pas forcément l'effet escompté. En tout cas, ça se mesure et pour mesurer, il faut réaliser des jeux de tests et comparer avec une mouture asyncio car en plus du soucis de "design" on a le Global Interlock qui rend cela plus gourmand en CPU sans permettre d'en consommer plus.

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

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 473
    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 473
    Points : 9 270
    Points
    9 270
    Billets dans le blog
    6
    Par défaut
    Bonjour

    D'accord avec les réponses précédentes: il faut commencer par optimiser le code python. De plus, il y a un aspect peu connu de Cython: le code compilé est très rapide, à condition qu'il ne travaille qu'avec les types de données connus en C. Si on le fait travailler avec des types de données spécifiques à Python (list, dict, etc...), on l'oblige à faire des appels à l'API python, ce qui peut le ralentir méchamment, et même le rendre plus lent que le code Python lui-même (ça m'est déjà arrivé). A voir selon les cas.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 311
    Points : 202
    Points
    202
    Par défaut
    Bonjour à tous,

    Après quelques vacances, je reprends le post. Je prends bonnes notes de vos remarques. Je vais revoir les choses et continuer sur des voies plus classiques.

    Encore merci à vous
    Douter de tout, toujours, et surtout de soi-même...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation des ".class" dans un projet Eclipse
    Par Lolitaaa dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2009, 13h49
  2. [DisplayTag] problème d'utilisation avec glassfish dans un projet EJB
    Par wl1979 dans le forum Taglibs
    Réponses: 0
    Dernier message: 14/04/2009, 12h35
  3. Utiliser une DLL dans un projet MDI
    Par Gazdon dans le forum Fortran
    Réponses: 0
    Dernier message: 26/01/2009, 11h58
  4. [NVSG] Utilisation du NVSG dans vos projets
    Par Kurisu dans le forum API graphiques
    Réponses: 0
    Dernier message: 12/12/2008, 15h30
  5. [MFC] Utiliser la MFC dans un projet ATL
    Par glKabuto dans le forum MFC
    Réponses: 6
    Dernier message: 24/04/2006, 15h17

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