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 :

threads ou autres solutions ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 38
    Par défaut threads ou autres solutions ?
    Bonjour,

    Comment procéderiez vous pour accélérer mon programme dont le schéma est le suivant :
    à partir d'une liste de plusieurs milliers d'éléments, je lance une boucle for pour scanner ceux-ci. je récupère, via le module urllib, un fichier txt sur le net. je le traite pour extraire les données qui m'intéressent et je les stocke dans un fichier.

    il me faut presque 30 min pour récupérer les infos de ma liste
    faut il que je m'intéresse aux threads ?
    y aurait il d'autres solutions ?

    merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut salut. questions
    je lance une boucle for pour scanner ceux-ci
    qu'entends-tu par scanner les éléments de ta liste ?
    a priori, rien n'est plus rapide qu'une list comprehension pour traiter une liste.

    que retires-tu du scanning de ta liste ? une donnée ou plusieurs ? je demande ça parce que tu dis qu'après avoir scanné ta liste, tu récupère UN fichier txt sur le net

    qu'est ce que tu entends par fichier txt d'ailleurs ?
    s'agit-il d'un code source de page web ?

    dans quoi mets-tu ton fichier récupéré sur le net ?
    je conseille de mettre dans une liste personnellement, ça facilite le traitement, avec des list comprehension justement

    il me faut presque 30 min pour récupérer les infos de ma liste
    tu parles uniquement du scanning initial ou de l'ensemble du processus ?

    les threads, je ne maitrise pas du tout

    Quelle puissance ton ordinateur aussi ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 38
    Par défaut
    qu'entends-tu par scanner les éléments de ta liste ?
    c'est juste le fait de les traiter 1 par 1 avec une boucle for.

    que retires-tu du scanning de ta liste ? une donnée ou plusieurs ?
    j'en retire une seule chaine correspondant à un code

    qu'est ce que tu entends par fichier txt d'ailleurs ?
    s'agit-il d'un code source de page web ?
    je télécharge un fichier txt qui contient des infos actualisées sur le code
    non pas de code source

    tu parles uniquement du scanning initial ou de l'ensemble du processus ?
    l'ensemble du processus


    en fait je pensais aux thread (que je n'ai jamais utilisé) pour traiter plusieurs éléments de ma liste en même temps. je ne sais pas du tout si c'est adapté à mon cas (listes).

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Scanner, oui bon j'avais compris que tu passes en revue les éléments les uns après les autres. Mais je voulais savoir si tu avais plusieurs tests ou un seul à mener sur chaque élément, pour trouver un seul ou plusieurs éléments,etc....des renseignements un peu plus renseignant sur ce que tu fais.

    Je ne sais pas utiliser les threads, donc je ne voudrais pas t'induire en erreur, mais avec ce que tu dis, il me semble qu'il faut plutôt que tu cherches du coté des list comprehension que des threads.

    Comme tu cherches à identifier un seul élément dans ta liste, je suppose que le test de détection est assez simple et je pense qu'une ou plusieurs list comprehension en cascade devrait faire le travail très rapidement.
    Si le test est un peu sophistiqué il te faudra recourir aux regular expressions.
    Maintenant si tu n'en dis pas plus, on ne peut pas beaucoup t'aider.

    Exemple de list comprehension:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extr = [ item[23:34] for item in liste if '890RTZ' in item ]

    Il serait bon aussi de déterminer les temps d'exécution des deux parties de ton programme:
    - la recherche de chaine dans ta liste
    - l'obtention du fichier txt sur le net et son traitement
    De facon sommaire, tu peux faire ça avec des clock() placés avant-au milieu et après ton programme.

  5. #5
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Bonjour,

    Citation Envoyé par hercule4 Voir le message
    en fait je pensais aux thread (que je n'ai jamais utilisé) pour traiter plusieurs éléments de ma liste en même temps. je ne sais pas du tout si c'est adapté à mon cas (listes).
    Les threads de Python ont une mauvaise réputation, voilà ce qu'on peut lire sur Wikipedia par exemple :
    CPython uses a GIL to allow only one thread to execute at a time while the Stackless Python threads are independent of the OS and can run concurrently.
    http://en.wikipedia.org/wiki/Python_...ming_language)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 38
    Par défaut
    désolé eyquem, je me suis mal expliqué.
    je reprends chacune de mes étapes :

    j'ai au départ:
    1/ une base mysql qui regroupe des noms de laboratoires et des codes spécifiques à chaque labo (ex labo trucmuche a un code qui lui est propre z4521).
    2/ un répertoire contenant pour chaque labo un fichier de données ex : z4521.txt

    mon but est de mettre à jour ces fichiers txt en récupérant pour chaque journée les données d'activité des labos.

    voilà comment je procède actuellement :
    1/ je crée une liste contenant tous les codes labos à partir de ma base mysql
    ex [z4521, z2251, z3678,...]

    2/ je parcours cette liste élément par élément.

    3/ pour chaque élément, je récupère un fichier txt sur le serveur des labos via urllib. le lien est facile puisque il est de la forme : http:\\www.labocentral.com\activite_jour\z4521.txt
    puis je parse le fichier pour récupérer les infos de l'activité du jour.
    je mets alors à jour mon fichier de stockage

    j'espère avoir été plus explicite

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Ah ça devient beaucoup plus clair, en effet.

    Et j'avais mal compris: tu télécharges UN fichier txt mais PAR CODE. Donc grosso modo autant de fichiers txt que de codes labo dans la liste. Si la liste est longue, le temps de 30 minutes devient plus compréhensible.

    Quelques remarques qui me viennent tout de suite:

    - si tu crées une liste des codes labo à partir de la base mysql alors que la liste des labos ne change pas d'un jour à l'autre, c'est une perte de temps.
    Je ne connais pas bien mysql, mais d'aprés ce que tu dis, je pense qu'il y aurait intérêt
    = soit à réorganiser la BDD pour avoir une base constituée uniquement des codes labo + un répertoire qui donnerait pour chaque code le nom du labo et les renseignements le concernant + le répertoire actuel des fichiers de données
    = soit de créer un répertoire supplémentaire qui contiendrait ces codes
    De cette façon au lieu de traiter à chaque fois la base actuelle, la liste des codes serait immédiatement disponible dans la base ou le répertoire supplémentaire

    - actuellement tu fais
    1/ création de liste, en parcourant la base
    2/ reparcours de la liste
    Donc deux parcours sur des données similaires
    Il vaudrait mieux faire tout de suite à partir de chaque code trouvé la recherche et le téléchargement du fichier txt correspondant. AMA

    - la façon dont tu parses le fichier txt obtenu sur le web est à voir aussi. Le code n'est peut être pas optimal. Faudrait voir.
    Tu parses avec un parseur tout fait ou c'est toi qui a écrit le parseur ?
    Dans quoi mets tu le fichier txt obtenu sur le web avant de le traiter ?

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/06/2006, 23h34
  2. [Tkinter] faire disparaitre un label ou autre solution
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 06/01/2006, 17h22
  3. Etat : fond de page ou autre solution ?
    Par Mulele dans le forum IHM
    Réponses: 3
    Dernier message: 11/11/2005, 20h15
  4. Autre solution que IBEvents
    Par aallal dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 13h12
  5. segment memoire partagee, thread, ou autre?
    Par Pouic dans le forum POSIX
    Réponses: 9
    Dernier message: 26/10/2004, 18h54

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