2016-05-06 1 views
0

Je veux exécuter une fonction toutes les 5 secondes. Ce code fonctionnerait:Python exécuter une fonction toutes les 5 secondes en utilisant les informations de l'essai précédent

import threading 
def notify(): 
    threading.Timer(5.0, notify).start() 

notify() 

si la fonction doit paramètre dans la course précédente? Je essayé ceci:

import threading 
def notify(since): 
    threading.Timer(5.0, notify(since)).start() 
# initial_id is just an integer, eg 423455677 
notify(initial_id) 

J'obtiens l'erreur:

Traceback (most recent call last): 
File "/Users/paulyu/anaconda/lib/python3.4/threading.py", line 911, in _bootstrap_inner 
self.run() 
File "/Users/paulyu/anaconda/lib/python3.4/threading.py", line 1177, in run 
self.function(*self.args, **self.kwargs) 
TypeError: notify() missing 1 required positional argument: 'since' 

Howe pour y remédier? Votre avis est très apprécié. Merci Paul

+0

Votre entrée et votre erreur ne sont pas corrélées. Qu'est-ce qui est censé être? –

+0

C'est juste un nombre que j'ai obtenu pour la fonction de notification. Pour la première exécution, je mets un nombre en paramètre à notify(), dont le nombre est récupéré par une autre fonction. –

+0

Votre deuxième exemple vous montre appelé notifier sans paramètre * depuis *, qu'essayez-vous réellement d'accomplir? –

Répondre

0

Lorsque vous devez vous souvenir d'un état, vous voulez généralement un cours.

import threading 

class Notifier: 

    def __init__(self, since): 
     self.since = since 

    def notify(self): 
     print(self.since) 
     self.since += 1 
     threading.Timer(2.0, self.notify).start() 

Notifier(123).notify() 
+0

Alors que ce code peut répondre à la question, il serait préférable d'inclure un certain contexte, en expliquant comment cela fonctionne et quand l'utiliser. Les réponses au code uniquement ne sont pas utiles à long terme. – Bono

+0

@Bono est-ce mieux? Il n'y a pas grand chose à expliquer. –

+0

@Alex Merci! J'ai créé la classe et l'ai testée. Travailler très bien. C'est la première fois que j'utilise une classe. Commencez à comprendre quand et pourquoi l'utiliser. :) –