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 :

Débuger les Boucles Infinies ?


Sujet :

Python

  1. #1
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut Débuger les Boucles Infinies ?
    Bonjour

    Voila j'ai souvent été confronté a ce problème avec python:

    Lorsque j'entame un boucle "infinie" (qui peu tourné jusqu'à l'infinie tant que la condition n'est pas remplie) python plante complètement.
    Enfin... pas complètement, le prog tourne et lorsque la condition est remplie, le prog reviens à la normale; Sauf qu'entre deux le prog ne repond plus.

    y'a il moyen de passé a travers ce problème ?

    Pour l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while 1:
      #code a exectuter
      if condition = 1:
      return condition
    tant que condition n'est pas égale a 1, le programme ne répond plus.
    Cela me pause problème pour 2 prog en particulier:

    - Mon Brute MD5 (qui fonctionne très bien mais qui plante completement temps que le hash n'a pas été trouvé; Autant dire que ça plante longtemps si j'essaye de retrouver "xGfn12,;S*sfD" lol)
    - Mon Scaner de Vulnerabilité Web:
    tant que le scan n'est pas terminer ça plante aussi, ce qui peut duré longtemps pour de gros site style CMS, et ce qui n'est pas très correcte pour un programme GUI (avec wx)

    De plus il est impossible de quitter le programme pendant ce temps, si on veut le fermer il faut killer le process.

    Cela me fait d'autant plus "peur" que j'essaye de faire un serveur web (type apache) en python qui tournera forcement en while 1: et qui n'aura aucune condition de fin de boucle...

    Voila voila
    Merci d'avance.

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

    Il faut que ta boucle de travail soit dans un thread (module threading).

    Une fois le thread lancé, le programme principal a la main et peut faire autre chose, alors que la boucle de travail continue à tourner dans le thread.

    Tu peux mettre dans la boucle de travail un drapeau d'arrêt qui permettra de stopper le thread sur demande du programme principal.

    Tyrtamos

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Tyrtamos t'a énoncé les deux solutions les plus propres, et je ne peux que te les recommander.

    Maintenant... Il existe une solution simple, si tu veux interrompre ce type de boucle et que tu es en environnement console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try:
        while 1:
            ...
    except KeyboardInterrupt:
        ...
    Quand tu fais la combinaison de touches ctrl-C, une exception de type KeyboardInterrupt est levée, et permet de sortir de la boucle.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut
    Merci beaucoup, je vais allé me renseigner sur ces threads.
    Excellent pour les gros progs.

    Et le KeyboardInterrupt me serra effectivement très utile pour les test en mode console

    Merci bien.
    Résolu.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/04/2011, 11h39
  2. [C#] Events, éviter les boucles infinies
    Par levalp dans le forum Windows Forms
    Réponses: 50
    Dernier message: 02/12/2007, 15h12
  3. Empêcher les boucles infinies
    Par Smilecodes dans le forum Apache
    Réponses: 2
    Dernier message: 19/08/2007, 13h04
  4. problème avec les boucle infinies
    Par manciaux dans le forum C
    Réponses: 3
    Dernier message: 14/05/2007, 13h16
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 01h04

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