Also ich bin mir sicher, dass es zu dem Thema schon ne Menge gibt, aber per Suchmaschinen findet man zu Schleifen oder Loops einfach nicht das richtige.
Meine Frage ist folgende: Ich habe ein Script, dass über längere Zeit laufen soll. Während der Laufzeit soll es alle paar Minuten aufwachen und einige Sachen "updaten", also Kram ins Internet schicken und wieder empfangen. Nur weiß ich nicht so recht, was die beste Lösung für so eine Schleife ist. Einfach while True und time.sleep? Oder gibt es da bessere Lösungen?
Danke.
Wie am besten Loop implementieren?
@jgillich: Ohne weitere Hintergründe, v.a. unter welchen Bedingungen die Anwendung aufwachen soll, kann man schwerlich mehr dazu sagen.
Es gibt keine Bedingungen, immer nur nach bestimmter Zeit.lunar hat geschrieben:@jgillich: Ohne weitere Hintergründe, v.a. unter welchen Bedingungen die Anwendung aufwachen soll, kann man schwerlich mehr dazu sagen.
Aber nochmal eine etwas genauere Beschreibung, falls das hilft: Es geht darum Informationen von einer Webseite abzurufen, umgesetzt habe ich das mit Selenium (http://seleniumhq.org/), da es wichtig ist dass die Webseite einen als "normalen" Besucher erkennt.
Jedenfalls habe ich vor, einfach alle paar Minuten die Seite zu öffnen und basierend auf diesen Informationen entweder das Programm wieder schlafen zu legen oder einige Aktionen auszuführen.
Besser?
@darktrym: So wie ich das erfasse, starten Timer nur nach einer bestimmten Zeit und wiederholen sich nicht. Könnte die dann zwar immer neustarten, aber das ist glaube ich nicht im Sinne des Erfinders.
@jgillich: Wenn Dein Programm Zustand hat, den es sich über die Webseitenaufrufe hinweg merkt, dann nimm doch einfach eine ``while``-Schleife in Verbindung mit `time.sleep()`. Wenn sich kein Zustand gemerkt werden muss und das Programm dauerhaft regelmässig ausgeführt werden soll, könnte man auch den Dienst des verwendeten Betriebssystems verwenden, der normalerweise für regelmässiges ausführen von Programmen benutzt wird.
Doch, ein Zustand muss sich schon gemerkt werden. While und time.sleep() war auch mein erster Gedanke, aber in der Python Doku wird davon mehr oder weniger abgeraten: http://docs.python.org/library/time.html#time.sleep
Ich plane auch noch eine GTK+-Oberfläche, von daher bin ich mir da unsicher.
Oder ist das unbedenklich?The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal’s catching routine.
Ich plane auch noch eine GTK+-Oberfläche, von daher bin ich mir da unsicher.
Es geht dabei um Millisekunden...jgillich hat geschrieben:While und time.sleep() war auch mein erster Gedanke, aber in der Python Doku wird davon mehr oder weniger abgeraten: http://docs.python.org/library/time.html#time.sleepThe actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal’s catching routine.
Bei einer GUI solltest du besser die Timer-Funktionalität des Toolkits verwenden.jgillich hat geschrieben:Ich plane auch noch eine GTK+-Oberfläche, von daher bin ich mir da unsicher.
Das, was jetzt allmählich zutage tritt, sind übrigens die Hintergründe/Bedingungen, nach denen lunar eingangs gefragt hatte.
Oh, ok na dann.snafu hat geschrieben:Es geht dabei um Millisekunden....
Ich habe mich bisher noch nicht so recht entschieden, möglicherweise wirds auch nur Kommandozeilebasiert oder ne Weboberfläche. Werde das dann dementsprechend umstellen.snafu hat geschrieben:Bei einer GUI solltest du besser die Timer-Funktionalität des Toolkits verwenden.
Danke an alle.
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Ansonsten:
So gehst du auf nummer sicher, wenn sleep() zu früh aufwacht.
Code: Alles auswählen
interval = 60
wakeup = time.time() + interval
while True:
now = time.time()
if now < wakeup:
time.sleep(wakeup-now)
continue
... do stuff ...
wakeup += interval
Bottle: Micro Web Framework + Development Blog