zwei unabhängigen Befehle in Python laufen

Achtung, der Thread ist alt. Das ist mir erst aufgefallen, als ich fertig war :-/

Sofern sich die Frage nur auf Prozesse bezieht (subprocess startet neue Prozesse), kannst du subprocess.Popen verwenden, um einen Prozess zu starten und nicht auf das Ergebnis des Prozesses warten zu müssen.

subprocess.call, subprocess.check_call, subprocess.check_output und subprocess.run blockieren bis der Prozess beendet ist.

Intern nutzen die Funktionen subprocess.Popen und blockieren so lange mit der Methode wait, bis der Prozess beendet ist oder ein Timeout abgelaufen ist, sofern er angegeben wird.


Falls du jetzt auf die Idee kommst, andere Python-Programm aus Python heraus mit subprocess zu starten, das ist eine schlechte Idee.
Dafür gibt es das import-system, threading, multiprocessing und asyncio.

Threading:
CPython nutzt Posix-Threads, kann aber aufgrund des GIL nur eine Python-Anweisung gleichzeitig ausführen. Seit 3.13.0 kann man den GIL deaktivieren (beim Kompilieren). Das wird derzeit noch getestet und kann auch wieder entfernt werden. Threads verbrauchen weniger Ressourcen (Speicher) als Prozesse.

Multiprocessing:
Wird genutzt, um den GIL zu umgehen. Hier werden neue Python-Prozesse gestartet, die dann die entsprechende Funktion ausführen. Hierbei ist das Problem die Serialisierung der Daten, da die beiden Prozesse keinen gemeinsamen Speicherbereich wie Threads haben.

Asyncio:
Kommt infrage, wenn es um IO geht. Also Daten, die von einem Netzwerk-Socket empfangen werden. Darauf wird reagiert und eine Eventloop kümmert sich darum. So können nebenläufig viele Verbindungen in nur einem Thread behandelt werden. Asyncio kommt nicht infrage, wenn man irgendwas berechnen will (CPU-Bound). Das blockiert dann die Ereignisschleife.
 
Zurück
Oben