Seite 1 von 1

Codezeilen zeitgesteuert ausführen

Verfasst: Freitag 10. Dezember 2004, 23:13
von alpha
Hallo zusammen,

hier eine vieleicht etwas ungewöhnliche Frage.
Ich möchte den Code eines Skripts Zeile für Zeile
zeitgesteuert ausführen. Also sicherstellen, daß
zum Beispiel in folgender Schleife immer z.B.: 100ms
zwischen der Ausführung des nächsten Kommandos
verstreichen., damit die Prozessorlast nie in die Nähe
der 100% Marke kommt.

Code: Alles auswählen

...
while x < 1000:
   x = x + 1
   print x
Ich will natürlich nicht zwischen jede Zeile einen sleep machen.
Das ganze soll so eine Art Interpreter werden.

Ich würde mich über ne gute Idee wirklich freuen.
Danke

Verfasst: Samstag 11. Dezember 2004, 18:35
von Dookie
Hi alpha,

ohne sleep(10) zwischen jeder Zeile wüsste ich da keine Lösung. Unter Linux könnte man die Priorität des Programms runtersetzen, bzw. den nice-Wert hinauf, was aber dann, bei einem Interaktiven Programm zu Lasten der Benutzbarkeit gehen würde.


Gruß

Dookie

Verfasst: Samstag 11. Dezember 2004, 19:41
von Beyond
Nein kein sleep mit festen Wert. Dann wird die Zeit vernachlässigt, die die Ausführung selbst braucht. Vielmehr muss die Verzögerungszeit ausgerechnet werden aus der Startzeit und der Wiederholungszahl. Ich hab vor Ewigkeiten mal einen Python-CRON programmiert. Er ist aber in meine PersistentThreads eingebaut.
Bei Interesse kann ich das mal rauskramen.
Dann gibt's noch das signal-modul, da kann man imho auch so einen Timer einbauen ...

cu beyond

Codezeilen zeitgesteuert ausführen

Verfasst: Montag 13. Dezember 2004, 17:41
von alpha
Hallo,

ich bins nochmal. Wie macht es denn die Python Konsole? Ihr kann ich doch auch nacheinander Zeilen übergeben und diese dann ausführen lassen. Gibts da nichts was man dafür misbrauchen könnte wie MAP, LAMBDA oder sowas?

Was macht eigentlich das Modul SIGNAL genau. Die Beschreibung in der Hilfe war mir keine solche :-) Es währ fürs erste auch egal wenn ich die Ausführungszeit zwischen den Zeilen vernachlässigen würde.

Danke schonmal
alpha

Verfasst: Montag 13. Dezember 2004, 17:56
von Dookie
Hi alpha,

die Pythonconsole wartet, bis der User eine Zeile (erkennbar daran, daß Enter gedrückt wurde) eingegeben hat und führt die dann aus. Vereinfacht ist das wie ein

Code: Alles auswählen

for line in sys.stdin:
    print eval(line)

Gruß

Dookie

Verfasst: Dienstag 14. Dezember 2004, 07:30
von jens
Könnte man nicht das Skript zeilenweise einlesen und mit eval() und sleep() das ganze "ausführen" ???

Aber was willst du überhaupt machen??? Unter Win. kann man mit "start /LOW" auch ein Programm mit niedriger Priorität starten...

Verfasst: Mittwoch 15. Dezember 2004, 00:20
von alpha
Hallo Jens,

an sowas wie Zeilenweise aus der Datei einlesen und dann ausführen ahab ich auch gedacht. Das ganze soll ein Rezeptinterpreter werden. Der Benutzer schreibt ein Rezept für ne Maschine (Ofen) und das ganze soll dann so funktionieren:

solltemperatur = 500
warte bis temperatur erreicht:
wenn isttemperatur >= solltemperatur
schleife verlassen

gasventil öffnen
...

Die Werte (isttemperatur...) werden in einem eigenen Thread von nem OPC-Server gelesen und immer aktualisiert.
Dieses Rezept schreibt aber ein Benutzer. Es muß also vor dem Start geprüft werden, und diese Warteschleifen dürfen nicht die ganze Prozessorpower brauchen. (die grafische Oberfläche muss ja auch noch flüssig bedienbar sein)
Deshalb halte ich es für sinnvoll, daß zwischen jeder Zeile ne Rechenzeitfreigabe für den Prozessor erfolgt. Wie seht Ihr das?

Gruss
alpha

Verfasst: Mittwoch 15. Dezember 2004, 00:21
von alpha
Ups, die Einrückungen für meine Schleife sind wohl verloren gegangen... sorry