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 :

timer et maximum recursion depth exceeded


Sujet :

Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 247
    Points
    247
    Par défaut timer et maximum recursion depth exceeded
    Bonjour à tous,
    voilà je cherche à comprendre comment fonctionne python pou résoudre ce petit problème.
    Je dois passer un paramètre (un widget gtk) dans une fonction qui est appelé toute les x secondes. Problème: quand je spécifie un paramètre à mes fonctions j'obtiens une maximum recursion depth exceeded alors que tout se passe bien si je n'ai pas de paramètre. J'ai réduis et réduis le code pour faire ressortir ce problème de récursivité:
    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
     
    #!/usr/bin/env python
     
    import pygtk
    import sys
    pygtk.require('2.0')
     
    import gnomeapplet
    import gtk
    import time
    from threading import Timer
     
     
    def tempo(widg):
           print "within tempo"
      param = widg
           t = Timer(2.0, displayTime(param) )
           t.start()
     
    def displayTime(widg):
           param = widg
           print "date: ", param, time.strftime("%a, %d/%m/%Y %H:%M:%S", time.localtime())
           tempo(param)
     
    print "Starting from command line"
    displayTime(" widget here ")
    étant débutant en python je ne comprends pas pourquoi l'introduction de ce paramètre "widg" change la manière d'exécuter ce bout de code.
    Si quelqu'un peu m'aider à comprendre, merci d'avance
    "Un peuple prêt à sacrifier un peu de liberté pour un peu de sécurité ne mérite ni l'une ni l'autre, et finit par perdre les deux."
    Benjamin Franklin

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    C'est quoi l'intention?
    En lisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def tempo(widg):
           print "within tempo"
      param = widg
           t = Timer(2.0, displayTime(param) )
           t.start()
    J'imagine qu'après 2.0s, la fonction displayTime devrait être appelée avec "param" en paramètre.
    Relisez la documentation de Timer, çà devrait s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           t = Timer(2.0, displayTime, args=(param,) )
    En écrivant displayTime(param), le callback sera le retour de l'appel à la fonction displayTime... qui appelle tempo qui appelle... jusqu'au boom du rlimit. Si la documentation est difficile à comprendre, prenez le temps de lancer Python en mode console pour faire un petit test.

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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 247
    Points
    247
    Par défaut
    Merci wiztricks,

    effectivement j'étais parti d'un exemple un peu long dans lequel le callback n'avait pas de paramètre.
    La différence de syntaxe avec des "langages" comme javascript (par exemple setTimeout ) m'avait induit en erreur.
    Je comprend mieux maintenant pourquoi il y avait ce type d'erreur, cela a du sens, et pourquoi la liste des arguments doit être passé à part. Super!
    "Un peuple prêt à sacrifier un peu de liberté pour un peu de sécurité ne mérite ni l'une ni l'autre, et finit par perdre les deux."
    Benjamin Franklin

Discussions similaires

  1. ORA-01000: maximum open cursors exceeded
    Par tro2blabla dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/08/2008, 15h00
  2. ORA-01000: maximum open cursors exceeded
    Par tro2blabla dans le forum PL/SQL
    Réponses: 3
    Dernier message: 21/08/2008, 14h56
  3. Réponses: 5
    Dernier message: 19/06/2008, 10h23
  4. Réponses: 5
    Dernier message: 04/12/2007, 10h49
  5. Réponses: 4
    Dernier message: 21/07/2006, 15h33

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