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 :

PYTHON - UNRAR : établir un Thread pour surveiller un Process [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut PYTHON - UNRAR : établir un Thread pour surveiller un Process
    Bonjour à toutes et à tous,

    Je publie cette discussion car je suis confronté à un problème. En effet, je débute sur python et j'aimerai avoir de l'aide sur du Threading.
    Je développe actuellement un script automation pour ce connecter à un FTP, naviguer vers des dossiers et télécharger les fichiers.
    Cette partie est en effet terminer mais j'aimerai pouvoir effectuer un thread afin de vérifier toutes les 20min si le téléchargement ne se déroule sans accrocs.

    voici mon code de download:

    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
     
    class Download:
     
      def __init__(self):
        self.path="FolderFiles"
        self.target=" /var/www/folder/Output"
     
     
      def downloadFile(self):
        for root, dirs, files in os.walk(self.path, topdown=False):
          for name in files:
            print(name)
            rarFiles=os.path.join(root, name)
            unrar = "unrar x -y "+rarFiles+self.target
          os.system(unrar)
          # time.sleep(10)
    Merci de votre aide

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

    Il est facile de créer et lancer un thread de test périodique, mais le problème ici est plutôt de savoir quoi tester et comment, c'est à dire de répondre à "vérifier toutes les 20mn si le téléchargement se déroule sans accrocs".

    Voilà un petit code de principe pour le thread. J'ai choisi la version "classe" parce qu'on peut facilement ajouter des méthodes permettant d'agir sur le thread (comme la méthode "stop()"):

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    # -*- coding: utf-8 -*-
    # Python 3
     
    import threading
    import time
     
    ##########################################################################
    class Monthread(threading.Thread):
     
        #=====================================================================
        def __init__(self, delai=1200):
            """Initialisation du thread
            """
            super().__init__()
     
            self.delai = delai # attente en secondes entre 2 tests
            self.encore = True # drapeau pour arrêter le thread sur demande
     
        #=====================================================================
        def run(self):
            """partie du thread lancé par "start()" et qui s'exécute en tâche de fond
            """
            while self.encore:
                #
                # test
                #
                time.sleep(self.delai) # attente entre 2 tests
     
        #=====================================================================
        def stop(self):
            """méthode permettant d'arrêter le thread à la fin de chaque délai
            """
            self.encore = False
     
    ##########################################################################
    if __name__=='__main__':
     
        # ouverture du 
        monthread = Monthread()
        monthread.daemon = True
        monthread.start()
     
        #
        # travail à faire pendant que le thread fait ses tests en tâche de fond
        #
     
        # arrêt demandé du thread
        monthread.stop()
        while monthread.isAlive():
            time.sleep(0.1)
     
        print
        print("fin du programme!")
    Si le test devait accéder à des variables en partage avec le programme principal, il faudrait protéger leurs accès avec des verrous (threading.Lock()). On pourrait imaginer, par exemple, que le programme principal place dans une variable globale le nombre de fichiers téléchargés, et que le thread vérifie bien que le nombre de ces fichiers est plus grand que 20 minutes avant (sinon, le téléchargement est bloqué).

    Il faudra, bien sûr, savoir quoi faire si le téléchargement n'avance plus! Peut-être un message à l'utilisateur suffirait pour qu'il agisse, mais on peut aussi gérer un drapeau et créer une méthode supplémentaire pour que le programme principal puisse demander au thread le résultat du dernier test.

    Enfin, quand le téléchargement sera terminé, il faudra arrêter le thread. Cependant, comme il a été déclaré "daemon=True", le programme principal arrêtera le thread quand il se terminera lui-même.

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut
    Hello @Tyrtamos, tout d'abord je tiens à te remercier pour ton temps dédié à mon petit problème. Aussi je vais utiliser ton exemple de thread et le tester avec ma partie de download.
    Puis-je revenir vers toi si je rencontre quelques difficultés ?

    Merci bien et à très vite pour un report

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut
    Bonjour @Tyrtamos,

    j'ai en effet essayer d'ajouter ton exemple code au mien. Mais pour une raison qui m'échappe, soit je fais mal mon test soit j'ai placer mon code au mauvais endroit...
    Au niveau du travail à faire pendant que le thread fait ses tests en tâche de fond:
    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
     
    if __name__=='__main__':
     
        # ouverture du 
        monthread = Monthread()
        monthread.daemon = True
        monthread.start()
     
        #
        # travail à faire pendant que le thread fait ses tests en tâche de fond
        #
     
        # arrêt demandé du thread
        monthread.stop()
        while monthread.isAlive():
            time.sleep(0.1)
     
        print
        print("fin du programme!")
    j'ai ajouter mon morceau de code concernant le download, j'ai retirer sur mon serveur une partie de mon archive pour créer une errorAlert.
    Mais je ne sais en aucun cas si le thread travail en même temps ou non ?!

    Pourrais-tu m'aiguiller s'il-te-plaît ?

    merci bien

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut
    Après de nombreux tests, j'ai décidé de travailler de cette façon : analyser les fichiers après téléchargement en fonction de la taille, du temps de téléchargement, etc...
    La bibliothèque unrar ne peut fournir aucune solution pour tester le process durant le téléchargement.

    Merci pour votre aide

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

Discussions similaires

  1. [Internet] Logiciels pour surveillance d'une connexion ADSL
    Par Axiome dans le forum Dépannage et Assistance
    Réponses: 4
    Dernier message: 03/02/2006, 05h35
  2. [Reseau] Appli Java pour surveiller l'état d'un réseau
    Par Migraine dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 17/08/2005, 11h43
  3. Réponses: 3
    Dernier message: 11/02/2004, 12h50
  4. Outils linux pour surveiller les perf d'un serveur ?
    Par MASSAKA dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 22/10/2002, 10h40

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