Mehrer Scripte gleichzeitig starten

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
Knuffi
User
Beiträge: 60
Registriert: Dienstag 28. Oktober 2014, 19:52

Hallo,
ich möchte aus einem (Haupt)Script verschieden andere Scripte starten. Ich habe es mit execfile(execfile("test.py") probiert, aber es startet nur das erste Script. Im Forum habe ich nichts gefunden das ich auch verstehe (ich bin noch Python-Anfänger). Bisher starte ich die Scripte einzeln, in separaten LX Terminal´s, ist aber bei jedem Start aufwändig. Es gibt sicherlich andere Wege von denen ich nichts weiss.
Bitte helft mir.
Danke
Gruß
Knuffi
BlackJack

@Knuffi: Ich denke man sollte erst einmal klären ob das überhaupt ein Python-Problem ist. Wenn es einfach nur darum geht unter Linux ein Programm asynchron zu starten, dass geht in der Shell mit einem & am Ende der Aufrufzeile.
Knuffi
User
Beiträge: 60
Registriert: Dienstag 28. Oktober 2014, 19:52

hallo
Danke für die Antwort. Da ich mit den besagten Pythonscripten auf den I2C Bus zugreife, bin ich mir nicht sicher, ob das unter Linux funktioniert. Und dann wäre da das Problem ob ich das dann auch verstehe und umsetzen kann. Es sind 8 verschieden Scripte, nicht 8 mal das selbe (nicht asynchron).
Gruß
Knuffi
BlackJack

@Knuffi: Wenn die Prozesse alle auf das selbe Gerät zugreifen dann könnte das in der Tat ein Problem geben wenn die Gefahr besteht das mehr als eines zur gleichen Zeit zugreifen könnte. Das lässt sich dann aber auch nicht mehr sinnvoll mit einzelnen, getrennten Programmen lösen. Da bräuchte man einen Prozess in dem vielleicht mehrere Threads laufen und der Zugriff auf den Bus entsprechend threadsicher gestaltet ist, oder man schreibt das Programm so um, dass ein Thread ausreicht.

Asynchron heisst nicht dass es immer das selbe Programm sein muss, sondern das der Prozess parallel zur Shell gestartet wird und man danach auf der Shell weiterarbeiten kann weil die nicht auf das Ende des Programms wartet. Und dann kann man natürlich auch weitere Prozesse asynchron von dieser Shell aus starten.
Knuffi
User
Beiträge: 60
Registriert: Dienstag 28. Oktober 2014, 19:52

hallo
ja, das mit dem Zugriffskonflikt wäre eine gewisse Problematik, aber es wird von jedem Script nur auf eine bestimmte Adresse zugegriffen. Es gab in der Probephasen geringe Problem beim Zugriff auf den "I2C-EEProm". Problem gering, da nur alle 10 Minuten auf die Datenquelle zugegriffen wird. Zugriffkonflikte mit Try: und Ecept IOError abgefangen. Problem gelöst.
Die Daten zwischen den einzelnen Scripten werden mittel eines EEprom ausgetauscht. Alles funktioniert einwandfrei. Aber ich möchte alles 8 Scripte mit nur einem Hauptscript starten.
Gruzß
Knuffi
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Knuffi: das ist ein typischer Fall von Verdrängung. Du hast ja gerade keine Lösung des Problems des Parallelzugriffs gefunden. Da alle Skripte anscheinend sowieso schon in Python geschrieben sind, wäre doch die saubere Lösung, ein Skript mit 8 Threads und einem koordinierten Zugriff auf den Bus zu schreiben.
Knuffi
User
Beiträge: 60
Registriert: Dienstag 28. Oktober 2014, 19:52

die erste Scriptvariant war auch so geschrieben, das aus einer Endlosschleife, nach Beadrf auf die 8 I2C Chips zugegriffen wurde. Und hier liegt der Hase im Pfeffer, wenn ein I2c Chip länger braucht um z.b eine Messung durchzuführen, sind die anderen 7 Tod und reagieren nicht auf äussere Eibnflüsse, z.b Tastenabfrage. Die enzelnen Subroutinen können abhängig von Ein- und Ausgabe schon bis zu einige Minuten das Script ausbremsen. Es läuft alles super. Hatte füher schon mit Kind-Prozesse experiementiert, Problem Datenaustausch zwischen den Prozessen und das jeder Keinprozess auf eine anderfe Adress zugreift
Gruß
Knuffi
BlackJack

@Knuffi: Sirius hatte weder eine einzelne Schleife noch verschiedene Prozesse vorgeschlagen sondern Threads.
Antworten