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 :

Sauter l'itération si le temps d'exécution d'une instruction est dépassé


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Par défaut Sauter l'itération si le temps d'exécution d'une instruction est dépassé
    Bonjour tout le monde,

    Je suis entrain d'écrire un code pour manipuler des fichiers textes en utilisant une fonction nommée (metrics) qui calcule et retourne des mesures géométriques pour chaque fichier texte.
    En revanche, certains fichiers textes présentent des anomalies et donc la fonction (metrics) entre dans un boucle infini.

    Pour résoudre ce problème, je veux intégrer une instruction conditionnelle (if) qui saute à l'itération suivante si le temps d’exécution dépasse un temps t.
    J'ai pensé à utiliser la bibliothèque time qui calcule le clock mais le problème que je n'arrive pas à implémenter l'instruction conditionnelle correctement ..
    J'espère que vous pouvez m'aider.
    Merci
    Voilà le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from calculations import metrics
    import time
     
     
    for file in sorted(os.listdir(my_folder)):
     
    	input_x = os.path.join(my_folder, file)
    	t_1 = time.clock()
    	d = metrics(input_x) 
    	t_2 = time.clock()
    	t = t_2-t_1
    	if(t>2.):
    	        continue

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ça ne peut pas fonctionner comme ça. À cette ligne d = metrics(input_x) le programme attend le retour de metrics() et donc la ligne suivante ne s'exécute pas et tu ne peux pas contrôler le temps d'exécution. Enfin, si mais trop tard.

    C'est dans la fonction metrics que tu dois traiter ce problème.

    Note que quand tu fais continue ça n'arrête pas pour autant la fonction metrics, donc un thread ne serait pas une solution non plus.

  3. #3
    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
    Salut

    +1 avec VinS. C'est dans metrics qu'il faut voir cela.
    Dans un code bien fait il n'y a jamais de boucle infini. Et si on en a une du type :

    et qu'on est pas sûr qu'à un moment donné la formule à l'intérieur de la boucle nous produise un r négatif qui va provoquer la sortie, alors on met un nombre maximum d'itérations


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    max_iter = 10000
    n=0
    while r>0 and n<max_iter :
        r = ....
        n+=1
    et de la sorte tu n'as jamais de boucle infinie. Tu as juste une boucle qui au pire fera max_iter itérations.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Salut

    +1 avec VinS. C'est dans metrics qu'il faut voir cela.
    Dans un code bien fait il n'y a jamais de boucle infini. Et si on en a une du type :

    et qu'on est pas sûr qu'à un moment donné la formule à l'intérieur de la boucle nous produise un r négatif qui va provoquer la sortie, alors on met un nombre maximum d'itérations


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    max_iter = 10000
    n=0
    while r>0 and n<max_iter :
        r = ....
        n+=1
    et de la sorte tu n'as jamais de boucle infinie. Tu as juste une boucle qui au pire fera max_iter itérations.

    Merci beaucoup pour cette réponse.
    Je vais essayer d’intégrer ceci dans la fonction de metrics ...

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2018
    Messages : 16
    Par défaut
    Salut
    et avec une boucle infinie ? tu lances ton thread dedans et tu pourras chronométré le temps du thread.
    Bien gérer les conditions de sortie
    Après tu prendre le problème dans l autre sens et faire une fonction qui gère la conformité du fichier.
    Les fichiers qui posent problème tu peux peut être les identifiés.

  6. #6
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2018
    Messages : 16
    Par défaut
    je n'avais pas vu la réponse de lg_53 ... la boucle infinie c'est la base des programmes semi-temps réel sur des raspberry par exemple ...
    c'est comme les chasseurs il y la bon dev et le mauvais dev

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Par défaut
    Citation Envoyé par BobbyBro Voir le message
    Salut
    et avec une boucle infinie ? tu lances ton thread dedans et tu pourras chronométré le temps du thread.
    Bien gérer les conditions de sortie
    Après tu prendre le problème dans l autre sens et faire une fonction qui gère la conformité du fichier.
    Les fichiers qui posent problème tu peux peut être les identifiés.

    En fait, c'est plus dure d'identifier les mauvais fichiers comme ils sont déjà générés automatiquement à travers un algorithme de deep learning, et c'est à travers les mesures de la fonction metrics, je peux identifier si le fichier est conforme ou pas ...

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Si vous ne voulez/pouvez pas modifier la fonction metrics, vous pouvez essayer d'apprendre à jouer avec le timeout decorator. Ou vous inspirer des solutions ad hoc données en référence de la (petite) documentation qui vient avec.

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

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Si vous ne voulez/pouvez pas modifier la fonction metrics, vous pouvez essayer d'apprendre à jouer avec le timeout decorator. Ou vous inspirer des solutions ad hoc données en référence de la (petite) documentation qui vient avec.

    - W
    Merci !

    J'ai essayé 'timeout_decorator", il m'apparaît efficace; mais dommage qu'il retourne un message de sortie une fois le temps est dépassé au lieu de passer à l'itération suivante.

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Ça ne peut pas fonctionner comme ça. À cette ligne d = metrics(input_x) le programme attend le retour de metrics() et donc la ligne suivante ne s'exécute pas et tu ne peux pas contrôler le temps d'exécution. Enfin, si mais trop tard.

    C'est dans la fonction metrics que tu dois traiter ce problème.

    Note que quand tu fais continue ça n'arrête pas pour autant la fonction metrics, donc un thread ne serait pas une solution non plus.
    Salut,

    Merci pour ta réponse.
    En fait, je sais bien que le code n'est pas juste comme "if" vient après l’exécution de la fonction metrics , c'était juste pour vous clarifier ma question

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2006, 15h35
  2. Différences de temps d'exécution d'une même requête
    Par hellbilly dans le forum Access
    Réponses: 3
    Dernier message: 16/12/2005, 20h56
  3. Temps d'exécution d'une vue
    Par mic79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2005, 16h50
  4. Réponses: 9
    Dernier message: 20/06/2005, 12h17
  5. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48

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