Seite 1 von 1

Periodischer Timer

Verfasst: Freitag 8. Januar 2010, 10:10
von Poseidonius
Hallo zusammen,

ich möchte eine Funktion periodisch wiederholen (zum Beispiel jede Sekunde einen Messwert ausgeben) ... unter Matlab, Java usw. gibts dafür Timer-Objekte die man mit einer Periodendauer und der aufzurufenden Funktion versieht und los gehts.

Hat Python was änliches zu bieten?

Grüße und ein schönes Wochenende

Poseidonius

Verfasst: Freitag 8. Januar 2010, 10:57
von Rebecca
threading.Timer.

Ist mit dem Suchbegriff "timer" in der Doku auch nicht so schwer zu finden. :wink:

Verfasst: Freitag 8. Januar 2010, 19:37
von Poseidonius
Danke für den Hinweis Rebecca,

in der Doku war ich auch schon gelandet, habe aber den threading.Timer() so verstanden, dass man damit lediglich die Funktionsausführung verzögern kann ... ich wollte aber eine fortwährende Ausführung alle n Millisekunden.

Ich habe es jetzt mit einem QtCore.Timer gemacht, analog zu

http://www.mail-archive.com/pyqt@riverb ... 12106.html

Geht es mit threading auch?

Grüße

Poseidonius

Verfasst: Freitag 8. Januar 2010, 20:12
von birkenfeld
Im Prinzip reicht es doch aus, einen Thread zu starten und dann zwischen den Auswertungen jeweils ein ``sleep(1.0)`` zu machen.

Gut, der Unterschied ist, die Auswertung wird nicht jede Sekunde, sondern im Sekundenabstand ausgeführt.

Verfasst: Freitag 8. Januar 2010, 20:30
von jbs
Oder man merkt sich einfach wie lange die Funktion etwa gebraucht hat.

Code: Alles auswählen

import threading, time

class Timer(threading.Thread):
    def __init__(self, func, sec=2):
        super(Timer, self).__init__()
        self.func = func
        self.sec = sec
        self.running = True

    def stop(self):
        self.running = False

    def run(self):
        while self.running:
            t = time.time()
            self.func()
            time_elapsed = time.time()-t
            time.sleep(self.sec-time_elapsed if time_elapsed > 0 else 0)

def function():
    print 'i'
    time.sleep(0.4)

t = Timer(function)
t.start()
time.sleep(10)
t.stop()

Verfasst: Mittwoch 13. Januar 2010, 09:46
von Poseidonius
Danke für Eure Hinweise ! Wieder was gelernt !