2016-07-15 33 views
-1

Ich habe eine unendliche Schleife für die wie so läuft:zunehmende Timer in Python

for I in count(): 
    #doing something 
    savetask = savedata() 
    if savetask == None: 
     timerfunction() 


def timerfunction(): 
    time.sleep(60) 

Meine Frage oder besser gesagt, was ich erreichen will, ist eine Funktion, die wie folgt ausgeführt wird. #do etwas, wenn savetask == None, Schlaf für 60 Sekunden, wiederhole für Schleife, wenn savetask == Keine WIEDER, Schlaf für 300 Sekunden, wiederhole für Schleife, wenn savetask == Keine WIEDER, Schlaf für 600 Sekunden ... etc etc Wenn savetask! = None, dann möchte ich es nach 60 Sekunden oder am Anfang neu starten.

Muss ich zusätzliche Variablen übergeben, damit es weiß, dass die Funktion zum zweiten Mal ausgeführt wird und savetask == None?

Jede Hilfe oder Anleitung wäre willkommen.

Edit:

Weil ich bin mit count() und die Zählung Funktion ist:

def count(I=0) 
    while not finished(): 
     yield I 
     I += 1 

das bedeutet, dass ich um eins erhöht jedes Mal? Also könnte ich das vielleicht verwenden, um zu zählen, wie oft die Funktion ausgeführt wird, und setze i zurück, wenn savetask! = None?

+0

warum erhielt ich 2 unten Abstimmungen ???? – Dorian

+0

woher bekommst du savetask? – Hamlett

+0

@Hamlett Ich habe meinen obigen Code bearbeitet. Nicht sicher, ob es tatsächlich zu dem Problem gehört, aber wenn es dann hilft, dann gut. Es gibt jedoch viel mehr Code davor ... – Dorian

Antwort

0

Sie Backoff tun so etwas wie dieses

for i in count(): 
    #doing something 
    savetask = savedata() 
    if savetask == None: 
     timerfunction(i) 

def timerfunction(i): 
    time.sleep(60*2**i) 

Moll stilistisch, Kapitelle in Python sind in der Regel für die Klassen exponentiell können. behalten Sie Variablen niedrigeres cases

+0

@James Wie setze ich die Zählung zurück? – Dorian

+0

@Natecat Ich gebe den Zählcode ein ... – Dorian

+0

@Dorian Übergeben Sie es eine 0, wenn Sie es anrufen. – Natecat