Seite 1 von 1

Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 07:06
von frcom
Hallo,
Ich habe eine Frage, die nicht direkt in GUI passt aber doch etwas damit zu tun hat: Ich habe eine Oberfläche in Gtk geschrieben und möcht von dort über einen Button ein anderes python Skript laufen lassen, dass in einer unendlich Schleife läuft. Nun soll aber natürlich die GUI nicht so lange nicht bedienbar sein, sondern das Skript im Hintergrund gestartet werden. Wie würded ihr das lösen? Danke!

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 07:13
von Sirius3
Python-Skripte laufen am besten gar nicht als eigenständiger Prozess. Wie man das, was da im Hintergrund läuft, am besten einbindet, hängt natürlich davon ab, was denn da laufen soll.

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 07:21
von frcom
Das Skript (ich nenne es Skript 1), das laufen soll, Durchsucht gegebene Directories nach Änderungen (bzw. eigentlich nur, ob ein *.raw file hinzugefügt wurde). Dieses File wird dann mittels subprocess.run() von einem externen Programm ausgewertet, dabei werden verschiedene Ordner und Files erstellt. Und am Ende werden diese Ordner und Files dann vom Skript 1 verschoben, sortiert etc.

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 07:42
von sparrow
Ist das externe Programm in Python geschrieben?

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 07:44
von frcom
sparrow hat geschrieben: Dienstag 31. März 2020, 07:42 Ist das externe Programm in Python geschrieben?
Nein und leider ist es auch kein open source o.ä. Ich habe keine Ahnung wie es funktioniert nur was raus kommt.

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 07:53
von __blackjack__
@frcom: Meh, im ersten Beitrag hast Du noch „ein anderes python Skript“ geschrieben. Dadurch ist mein Beitrag den ich gerade geschrieben habe hinfällig. ☹️

Also verkürzt für den jetzt veränderten Fall: Schauen ob `concurrent.futures` mehr Sinn macht als sich selbst was mit dem `threading`-Modul zu basteln. Das externe Programm mit `subprocess` in einem Thread ausführen. Und darauf achten, dass GUI-Rahmenwerke in der Regel nicht „thread safe“ sind. Bei Gtk ist aber beispielsweise `MainLoop.add_idle()` „thread safe“ und kann genutzt werden um aus anderen Threads heraus etwas im Hauptthread ausführen zu lassen.

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 08:05
von frcom
__blackjack__ hat geschrieben: Dienstag 31. März 2020, 07:53 @frcom: Meh, im ersten Beitrag hast Du noch „ein anderes python Skript“ geschrieben. Dadurch ist mein Beitrag den ich gerade geschrieben habe hinfällig. ☹️
Es wird durchaus erstmal ein anderes Python skript aufgerufen. Dieses wiederum ruft aber ein externes auf. Entschuldigung, für die Verwirrung :/
Also das erwähnte Skript 1 ist ein python skript

Re: Python Skript laufen lassen ohne dass das aktuelle stoppt

Verfasst: Dienstag 31. März 2020, 12:38
von __blackjack__
@frcom: Dann würde ich erst einmal schauen ob man *das* nicht noch importieren und entsprechend in einem Thread im eigenen Programm ausführen kann, bevor man am Ende drei Prozesse am laufen hat.