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 :

Optimisation script python recherche documentaire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur de nouveaux services et application web
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de nouveaux services et application web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut Optimisation script python recherche documentaire
    Bonjour,

    Je postule pour la première fois dans ce forum, en effet j'ai un souci avec mon script développé en python qui fonctionne bien mais est trop lent. J'ai cherché pas mal de moyens pour optimiser le code mais en vain. J'ai utilisé des threads pour paralléliser la recherche des fichiers dans les répertoires et utiliser des fonctions pour diminuer le nombre d'instruction mais toujours la même chose.

    En faites mon script faits une recherche dans différents répertoires pour retrouver le fichier recherché ou les fichiers comportant le nom du fichiers recherché. Les différents répertoires indexés par la recherche sont au nombre de 6 et contiennent des sous répertoires qui contiennent des milliers de fichiers.


    Merci d'avance .

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    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 : 4 063
    Par défaut
    Bonsoir,

    Pour ce genre de travail, python a fait beaucoup de boulot, mais pour cela il va falloir migrer au moins à la version 3.3

    Dans ta situation, tu peux essayer de voir dans des modules tels que glob par exemple... Plein d'autres solutions existent mais pas pour ta version. Il faudra avec un peu de chance regarder du côté des modules fait maison, avec une glue en C/C++ mais faut pas trop espérer avoir mieux que les modules standards.

    Après si la portabilité n'est pas importante voir du côté des systèmes si des commandes n'existent pas déjà pour faire ce genre de recherches et utiliser le module subprocess.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur de nouveaux services et application web
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de nouveaux services et application web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut
    Merci pour ta réponse, sinon ne pense tu pas que cette fonction glob ne fait pas la même chose de la module os.path et os.write.
    J'ai également utilisé dans mon code le module subprocess pour faire des commande bash mais le résultat n'est pas du tout concluant.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    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 : 4 063
    Par défaut
    Le plus simple est de tester, ça prend pas plus de quelques secondes. C'est bien documenté... On est bien d'accord qu'on recherche plus d'efficacité ? Si oui, il n'y a que le test chronométré qui peut donner des réponses.

    P.S surpris qu'en Bash ça n'existe pas 🤨

  5. #5
    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,

    Sous Python 2, le module externe "scandir" (https://pypi.org/project/scandir/) apportait plus de rapidité aux recherches sur disque. Il a été intégré à Python à partir de la version 3.5 (=> os.scandir).

    Sinon, je ne suis pas sûr que les threads apportent beaucoup d'avantages pour ces recherches, parce que le disque, lui, fera ses recherches en séquence. En tant que périphérique physique, il sera le "goulet d'étranglement". Si c'est critique, peut-être faudrait-il un disque SSD?

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Perso, j'avais traiter ce problème différement. Avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f > list_of_files.txt
    dans le terminal système (fonctionne sous linux, mac, et windows 10. Pour les windows versions antérieures je ne sais pas). Avec ca je créé un fichier qui contient tous les noms des fichiers du dossier courants.
    Puis après je fait une recherche de chaine de caractère dans ce fichier.
    L'avantage déjà c'est que si j'ai plusieurs recherche à faire, l'opération de construction de ce fichier n'est à faire qu'une seule fois.
    Je n'ai pas mesuré le temps d'éxécution de cette technique, mais je pense qu'une fois le fichier créé, c'est plus rapide. Car au lieu de demander au disque dur l'accès à plein de petit fichier, vous demander un seul et unique accès à un gros fichier, contenant la synthèse de toute l'info dont vous avez besoin.
    Si on considère l'étape de construction du fichier via le terminal, elle reste aussi surement plus rapide qu'en python.

    Autre point : Vous devriiez profiler votre code (avec cProfile par exemple) pour savoir où est ce que vous dépenser votre temps. Si ça se trouve vous faites des regex ultra couteuse, et c'est ca qui vous plombe et non pas le grand nombre de fichier à traiter !

Discussions similaires

  1. Recherche google via script python
    Par rvbp13 dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 31/10/2010, 21h30
  2. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  3. Script de recherche de type mime
    Par bluecurve dans le forum Modules
    Réponses: 1
    Dernier message: 31/08/2005, 17h36
  4. Réponses: 3
    Dernier message: 05/04/2005, 14h26
  5. Optimisation d'une recherche et mise à jour
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/01/2005, 18h38

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