Multiprozessierung ist vergleichbar mit Multithreading. Es unterscheidet sich jedoch darin, dass wir aufgrund des GIL, der zum Threading verwendet wird, nur einen Thread ausführen können. Multiprozessierung ist der Prozess der nacheinander über mehrere CPU -Kerne durchgeführten Vorgänge. Themen können nicht parallel betrieben werden. Multiprocessing ermöglicht es uns jedoch, die Prozesse festzulegen und sie gleichzeitig auf verschiedenen CPU -Kernen auszuführen. Die Schleife wie die For-Loop ist eine der am häufigsten verwendeten Skriptsprachen. Wiederholen Sie dieselben Arbeiten mit verschiedenen Daten, bis ein Kriterium wie eine vorgegebene Anzahl von Iterationen erreicht ist. Die Schleife führt jede Iteration einzeln durch.
Beispiel 1: Verwenden Sie die For-Loop im Python-Multiprozessing-Modul
In diesem Beispiel verwenden wir den Prozess für Schleife und Python-Multiprocessing-Modulklassen. Wir beginnen mit einem sehr einfachen Beispiel, damit Sie schnell verstehen können. Mit einer Schnittstelle, die mit dem Threading -Modul vergleichbar ist.
Das Multiprozessing-Paket bietet eher die Unterprozesse als die Fäden und bietet sowohl eine lokale als auch die entfernte Parallelität, wodurch das globale Interpreter-Schloss vermieden wird. Verwenden Sie eine For-Schleife, die ein String-Objekt oder ein Tupel sein kann, um kontinuierlich durch eine Sequenz zu iterieren. Dies führt weniger wie das Schlüsselwort in anderen Programmiersprachen und eher wie eine Iteratormethode, die in anderen Programmiersprachen zu finden ist. Wenn Sie eine neue Multiprozessierung beginnen.
Beginnen wir mit der Implementierung des Code für die Codeausführung mithilfe des Spyder -Tools. Wir glauben, dass „Spyder“ auch das Beste für das Laufen von Python ist. Wir importieren einen Multiprocessing -Modulprozess, den der Code ausführt. Multiprocessing im Python -Konzept, das als „Prozessklasse“ bezeichnet wird. Die Prozessklasse enthält die Verfahren start () und join (), die beide entscheidend sind.
Als nächstes definieren wir eine benutzerdefinierte Funktion namens "Func". Da es sich um eine benutzerdefinierte Funktion handelt, geben wir ihm einen Namen unserer Wahl. Innerhalb des Körpers dieser Funktion bestehen wir die Variable „Subjekt“ als Argument und den Wert „Maths“. Als Nächst. Im folgenden Schritt verwenden wir dann das "if name == _main_", das Sie daran hindert, den Code zu ausgeführt, wenn die Datei als Modul importiert wird.
Der Zustand, mit dem Sie beginnen, kann unter den meisten Umständen als Ort angesehen werden, um den Inhalt bereitzustellen, der nur ausgeführt werden sollte, wenn Ihre Datei als Skript ausgeführt wird. Dann verwenden wir das Argument -Thema und speichern einige Werte darin, die "Wissenschaft", "Englisch" und "Computer" sind. Der Vorgang erhält dann im folgenden Schritt den Namen „Process1 []“. Anschließend verwenden wir den „Prozess (target = func)“, um die Funktion im Prozess aufzurufen. Ziel wird verwendet, um die Funktion aufzurufen, und wir speichern diesen Prozess in der Variablen „P“.
Als Nächst.„Da der Prozess in der Variablen„ P “gespeichert ist, übergeben wir„ P “an diese Funktion als Argument. Schließlich verwenden wir die Funktion „start ()“ mit „P“, um den Prozess zu starten. Danach führen wir die Methode erneut aus, während wir das Argument „Subjekt“ liefern und im Subjekt „für“ verwenden. Dann beginnen wir mit "Process1" und der "add ()" -Methode mit dem Prozess. Der Prozess wird dann ausgeführt und die Ausgabe wird zurückgegeben. Das Verfahren soll dann mit der Technik „join ()“ beenden. Die Prozesse, die die Prozedur „join ()“ nicht aufrufen. Ein entscheidender Punkt ist, dass der Schlüsselwort „Args“ verwendet werden muss, wenn Sie über den Prozess Argumente vorlegen möchten.
Jetzt können Sie in der Ausgabe sehen, dass die Anweisung zunächst angezeigt wird, indem Sie den Wert für das Thema „Maths“ übergeben, das wir in die Funktion „Func“ übergeben, da wir sie zuerst mit der Funktion „Prozess“ aufrufen. Dann verwenden wir den Befehl „append ()“, um Werte zu haben, die sich bereits in der Liste befanden, die am Ende hinzugefügt wird. Dann wurden „Wissenschaft“, „Computer“ und „Englisch“ präsentiert. Wie Sie sehen können, sind die Werte jedoch nicht in der richtigen Reihenfolge. Dies liegt daran.
Beispiel 2: Umwandlung von sequentiellem For-Schleifen in die multiprozessierte parallele For-Loop
In diesem Beispiel wird die Multiprocessing-Schleifenaufgabe nacheinander ausgeführt, bevor er in eine parallele For-Loop-Aufgabe konvertiert wird. Sie können durch Sequenzen wie eine Sammlung oder Zeichenfolge in der Reihenfolge fahren, die sie mit den für die Schleife auftreten.
Beginnen wir nun, den Code zu implementieren. Zuerst importieren wir "Schlaf" aus dem Zeitmodul. Mit der Prozedur „Sleep ()“ im Zeitmodul können Sie die Ausführung des aufrufenden Threads so lange aussetzen, wie Sie möchten. Dann verwenden wir "zufällig" aus dem Zufallsmodul, definieren eine Funktion mit dem Namen "Func" und übergeben das Schlüsselwort "Argu". Dann erstellen wir einen zufälligen Wert mit "Val" und setzen ihn auf "zufällig". Dann blockieren wir einen kleinen Zeitraum mit der Methode „Sleep ()“ und passieren „Val“ als Parameter. Um eine Nachricht zu übermitteln, führen wir die Methode "print ()" aus, übergeben die Wörter "Ready" und das Schlüsselwort "Arg" als Parameter sowie "erstellt" und übergeben den Wert mit "Val" über "Val".
Schließlich verwenden wir "Flush" und setzen es auf "wahr". Der Benutzer kann entscheiden, ob die Ausgabe mithilfe der Flush -Option in der Druckfunktion von Python die Ausgabe puffern soll oder nicht. Der Standardwert von False des Parameters zeigt an, dass die Ausgabe nicht gepuffert wird. Die Ausgabe wird als eine Reihe von Zeilen angezeigt, die einander folgen, wenn Sie sie auf True einstellen. Anschließend verwenden wir den "If name == Main", um die Eintrittspunkte zu sichern. Als nächstes führen wir den Job nacheinander aus. Hier setzen wir den Bereich auf „10“, was bedeutet, dass die Schleife nach 10 Iterationen endet. Als Nächst.
Sie können nun sehen, dass die Funktion bei der Ausführung des Codes das 10 -mal „10“ -Fachen ausführt. Es iteriert das 10 -fache, beginnend bei Index Null und endet mit Index neun. Jede Nachricht enthält eine Aufgabenummer, die eine Funktionsnummer ist, die wir als „Arg“ und eine Erstellungsnummer übergeben.
Diese sequentielle Schleife wird jetzt in eine multiprozessierende Parallele für Schleife umgewandelt. Wir verwenden den gleichen Code, aber wir gehen zu einigen zusätzlichen Bibliotheken und Funktionen zur Multiprozessierung. Daher müssen wir den Prozess aus der Multiprozessierung importieren, genau wie wir zuvor erklärt haben. Als Nächst.
Nachdem wir die Methode „Print ()“ aufgerufen haben, um eine Nachricht anzuzeigen und den Parameter „Val“ zu geben, um einen kleinen Zeitraum zu verzögern, verwenden wir die Funktion „if name = main“, um die Einstiegspunkte zu sichern. Hier erstellen wir einen Prozess und rufen die Funktion im Prozess mit „Prozess“ auf und übergeben das „Ziel = func“. Dann passieren wir den "Func", "Arg", übergeben den Wert "M" und übergeben den Bereich "10", was bedeutet, dass die Schleife die Funktion nach "10" -Iterationen beendet. Anschließend beginnen wir den Prozess mit der Methode "start ()" mit "Prozess" mit der Methode "Prozess". Dann nennen wir die Methode „join ()“, um auf die Ausführung des Prozesses zu warten und den gesamten Prozess danach abzuschließen.
Wenn wir den Code ausführen, rufen die Funktionen den Hauptprozess auf und beginnen ihre Ausführung. Sie sind jedoch durchgeführt, bis alle Aufgaben erledigt sind. Wir können das sehen, weil jede Aufgabe gleichzeitig durchgeführt wird. Es meldet seine Nachricht, sobald sie fertig ist. Dies bedeutet, dass die Schleife zwar abgeschlossen sind, obwohl die Nachrichten nicht in Ordnung sind, die Schleife endet, nachdem alle „10“ Iterationen abgeschlossen sind.
Abschluss
Wir haben den Python-Multiprocessing-Verstoß in diesem Artikel behandelt. Wir haben auch zwei Illustrationen vorgestellt. Die erste Illustration zeigt, wie Sie eine Vorlauf in der Pythons Loop-Multiprocessing-Bibliothek verwenden können. Und die zweite Illustration zeigt, wie ein sequentielles Fürs Schleifen in eine parallele Multiprocessing-For-Loop verändert wird. Bevor wir das Skript für die Python -Multiprozessierung erstellen, müssen wir das Multiprocessing -Modul importieren.