Seite 1 von 1
Wie am besten Loop implementieren?
Verfasst: Donnerstag 15. September 2011, 16:27
von jgillich
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.
Re: Wie am besten Loop implementieren?
Verfasst: Donnerstag 15. September 2011, 18:37
von lunar
@jgillich: Ohne weitere Hintergründe, v.a. unter welchen Bedingungen die Anwendung aufwachen soll, kann man schwerlich mehr dazu sagen.
Re: Wie am besten Loop implementieren?
Verfasst: Donnerstag 15. September 2011, 19:44
von darktrym
Re: Wie am besten Loop implementieren?
Verfasst: Freitag 16. September 2011, 07:36
von jgillich
lunar hat geschrieben:@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.
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.
Re: Wie am besten Loop implementieren?
Verfasst: Freitag 16. September 2011, 08:08
von BlackJack
@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.
Re: Wie am besten Loop implementieren?
Verfasst: Freitag 16. September 2011, 09:12
von jgillich
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
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.
Oder ist das unbedenklich?
Ich plane auch noch eine GTK+-Oberfläche, von daher bin ich mir da unsicher.
Re: Wie am besten Loop implementieren?
Verfasst: Freitag 16. September 2011, 09:18
von snafu
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.sleep
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.
Es geht dabei um Millisekunden...
jgillich hat geschrieben:Ich plane auch noch eine GTK+-Oberfläche, von daher bin ich mir da unsicher.
Bei einer GUI solltest du besser die Timer-Funktionalität des Toolkits verwenden.
Das, was jetzt allmählich zutage tritt, sind übrigens die Hintergründe/Bedingungen, nach denen lunar eingangs gefragt hatte.

Re: Wie am besten Loop implementieren?
Verfasst: Freitag 16. September 2011, 09:22
von jgillich
snafu hat geschrieben:Es geht dabei um Millisekunden....
Oh, ok na dann.
snafu hat geschrieben:Bei einer GUI solltest du besser die Timer-Funktionalität des Toolkits verwenden.
Ich habe mich bisher noch nicht so recht entschieden, möglicherweise wirds auch nur Kommandozeilebasiert oder ne Weboberfläche. Werde das dann dementsprechend umstellen.
Danke an alle.

Re: Wie am besten Loop implementieren?
Verfasst: Mittwoch 21. September 2011, 12:44
von Defnull
Ansonsten:
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
So gehst du auf nummer sicher, wenn sleep() zu früh aufwacht.