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

Codezeilen zeitgesteuert ausführen

Beitragvon alpha » Freitag 10. Dezember 2004, 23:13

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

Beitragvon Dookie » Samstag 11. Dezember 2004, 18:35

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: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Samstag 11. Dezember 2004, 19:41

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

Codezeilen zeitgesteuert ausführen

Beitragvon alpha » Montag 13. Dezember 2004, 17:41

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

Beitragvon Dookie » Montag 13. Dezember 2004, 17:56

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: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 14. Dezember 2004, 07:30

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

Beitragvon alpha » Mittwoch 15. Dezember 2004, 00:20

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

Beitragvon alpha » Mittwoch 15. Dezember 2004, 00:21

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], DB7WN