Hi,
eine Frage zu while Schleifen. Gibt es eine komfortable Python - Funktion etc., was eine while-Schleife auf 1 Sekunde begrenzt? Klar, kann man auch von Hand machen, aber vielleicht gibts ja was feines?
quasi:
while(ab jetzt für die Dauer von X Sekunden):
...
Gruß
while 1 Sekunde ist noch nicht vorbei?
Sag uns doch bitte, welches Problem du lösen willst, nicht wie. Es scheint mir, als ob du eigentlich was anderes machen willst und das "Schleife nach 1 Sekunde abbrechen" eine suboptimale Lösung für etwas ist, dass sich evtl. mit Threads einfacher lösen ließe.
Die Frage, die du gestellt hast, ließe sich mit Timer beantworten. Es folgt ein kleines Beispiel. Achtung: Du solltest im richtigen Code keine globale Variable verwenden, sondern alles in einer Klasse kapseln, ich hab mir das hier gespart:Aber nochmal: sag uns bitte, welches Problem du damit lösen willst.
Die Frage, die du gestellt hast, ließe sich mit Timer beantworten. Es folgt ein kleines Beispiel. Achtung: Du solltest im richtigen Code keine globale Variable verwenden, sondern alles in einer Klasse kapseln, ich hab mir das hier gespart:
Code: Alles auswählen
import sys
from threading import Timer
keep_going = True
def set_to_false():
global keep_going # Im allgemeinen eine schlechte Idee
keep_going = False
keep_going = True
t = Timer(2, set_to_false)
t.start()
while keep_going:
print >>sys.stderr, "dumdidum..."
Zuletzt geändert von Joghurt am Donnerstag 18. Oktober 2007, 10:27, insgesamt 1-mal geändert.
simple lösung:Gibt es eine komfortable Python - Funktion etc., was eine while-Schleife auf 1 Sekunde begrenzt? Klar, kann man auch von Hand machen, aber vielleicht gibts ja was feines?
Code: Alles auswählen
from time import time
t = time()
while time() < t +1:
doStuff()
Code: Alles auswählen
def Deadline(seconds):
t = time()
i = 0
while t + seconds > time():
yield i
i += 1
# fünf sekunden lang hochzählen
for i in Deadline(5):
print i
Hi,
nagut, dann mit Roman, was allerdings nichts an der zu Beginn gestellten Frage ändert:
Ich möchte für 1 Sekunde lang Messwerte aufnehmen (wie und wo ist ja völlig egal) und dazu nehm ich eine while Schleife die 1 Sekunden lang rennt. Jo, das mach ich momentan so:
timestamp = time.clock()
while ((timestamp + 1) > time.clock()):
...
Jo, das wollte ich einfach eleganter haben, durch eine evtl vorhandene Funktion die es bereits in Python gibt, mehr nicht
Von Threads bin ich hier eigentlich weit entfernt.
Falls es keine andere Möglichkeit gibt, dann lass ich es halt so...
Gruß
nagut, dann mit Roman, was allerdings nichts an der zu Beginn gestellten Frage ändert:
Ich möchte für 1 Sekunde lang Messwerte aufnehmen (wie und wo ist ja völlig egal) und dazu nehm ich eine while Schleife die 1 Sekunden lang rennt. Jo, das mach ich momentan so:
timestamp = time.clock()
while ((timestamp + 1) > time.clock()):
...
Jo, das wollte ich einfach eleganter haben, durch eine evtl vorhandene Funktion die es bereits in Python gibt, mehr nicht

Von Threads bin ich hier eigentlich weit entfernt.
Falls es keine andere Möglichkeit gibt, dann lass ich es halt so...
Gruß
OK, in diesem Falle ist die Lösung ok. Es hätte ja aber z.B. auch sein können, dass du einfach für 1 Sekunde warten willst, es sei denn, ein bestimmtes Ereignis tritt ein. In dem Falle wäre die Whileschleife nämlich suboptimal gewesen.