Periodischer Timer

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

threading.Timer.

Ist mit dem Suchbegriff "timer" in der Doku auch nicht so schwer zu finden. :wink:
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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()
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Poseidonius
User
Beiträge: 63
Registriert: Montag 23. Januar 2006, 08:58

Danke für Eure Hinweise ! Wieder was gelernt !
Antworten