Was ist der Unterschied zwischen Multiprozessor und Subprozess?

73

Meine Arbeit sollte parallele Techniken verwenden, und ich bin ein neuer Benutzer von Python. Ich frage mich also, ob Sie etwas Material über Python multiprocessingund subprocessModule teilen könnten . Was ist der Unterschied zwischen diesen beiden?

Jun HU
quelle
@MartijnPieters Ja, ich war in diesen beiden ähnlichen Modulen verwirrt
Jun HU
Schauen Sie sich möglicherweise auch diese an greenlets- aber vermeiden Sie diese, bis Sie die Antworten auf Ihr OP verstanden haben
Jon Clements

Antworten:

94

Mit dem subprocessModul können Sie andere Programme ausführen und steuern. Alles, was Sie mit der Befehlszeile auf dem Computer beginnen können, kann mit diesem Modul ausgeführt und gesteuert werden. Verwenden Sie diese Option, um externe Programme in Ihren Python-Code zu integrieren.

Mit dem multiprocessingModul können Sie in Python geschriebene Aufgaben auf mehrere Prozesse aufteilen, um die Leistung zu verbessern. Es bietet eine API, die dem threadingModul sehr ähnlich ist . Es bietet Methoden zum Teilen von Daten über die von ihm erstellten Prozesse hinweg und erleichtert die Verwaltung mehrerer Prozesse, um Python-Code (viel) auszuführen. Mit anderen Worten, multiprocessingSie können mehrere Prozesse nutzen, um Ihre Aufgaben schneller zu erledigen, indem Sie Code parallel ausführen.

Martijn Pieters
quelle
10
@glglgl: Es tut mir leid, dass ich dir Schmerzen verursacht habe. Danke, dass du das aufgeräumt hast. :-) Mal sehen, ob ich meine Apostrophe in Schach halten kann!
Martijn Pieters
32

Wenn Sie ein externes Programm aufrufen möchten (insbesondere eines, das nicht in Python geschrieben wurde), verwenden Sie subprocess.

Wenn Sie eine Python-Funktion in einem Unterprozess aufrufen möchten, verwenden Sie multiprocessing.

(Wenn das Programm in Python geschrieben ist, aber auch importierbar ist, würde ich versuchen, seine Funktionen mit aufzurufen multiprocessing, anstatt es extern durch aufzurufen subprocess.)

unutbu
quelle
1
Was ist, wenn es sich um ein externes Programm handelt und ich es auf mehreren Prozessoren ausführen möchte?
Mooncrater
Möchten Sie das externe Programm mehrmals ausführen oder möchten Sie das externe Programm als einzelnen Prozess ausführen, um mehrere Prozessoren zu nutzen?
Unutbu
Mehrfach parallel. Um genau zu sein, OCRing mehrerer Bilddateien.
Mooncrater
2
Sie können mehrere nicht blockierende subprocess.calls starten . Jedes moderne Betriebssystem sollte die Prozesse gleichzeitig auf den verfügbaren Prozessoren ausführen. Sie können die Unterprozesse auch aus einem Thread-Pool heraus starten , um die Anzahl der gleichzeitig gestarteten Unterprozesse zu begrenzen.
Unutbu
Können Sie sehen , bitte diese ?
Mooncrater
16

Der Unterprozess erzeugt neue Prozesse, aber abgesehen von stdin / stdout und allen anderen APIs, die das andere Programm möglicherweise implementiert, haben Sie keine Möglichkeit, mit ihnen zu kommunizieren. Der Hauptzweck besteht darin, Prozesse zu starten, die vollständig von Ihrem eigenen Programm getrennt sind.

Multiprocessing erzeugt auch neue Prozesse, aber sie führen Ihren Code aus und sind so konzipiert, dass sie miteinander kommunizieren. Sie verwenden es, um Aufgaben innerhalb Ihres eigenen Programms auf mehrere CPU-Kerne aufzuteilen.

DNS
quelle