Codezeilen zeitgesteuert ausführen

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
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

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
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

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
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Ups, die Einrückungen für meine Schleife sind wohl verloren gegangen... sorry
Antworten