Importieren von Modulen, die MultiProcessing Python verwenden

Ich schaue, um das Multiprocessing-Modul zu verwenden, um die Laufzeit einiger Transport Planungsmodelle zu beschleunigen. Ich habe so viel wie möglich über "normale" Methoden optimiert, aber im Herzen von ihm ist ein absurd paralleles Problem. ZB Führen Sie den gleichen Satz von Matrix-Operationen vier 4 verschiedene Sätze von Eingängen, alle unabhängigen Informationen.

Pseudo-Code:

for mat1,mat2,mat3,mat4 in zip([a1,a2,a3,a4],[b1,b2,b3,b4],[c1,c2,c3,c4],[d1,d2,d3,d4]): result1 = mat1*mat2^mat3 result2 = mat1/mat4 result3 = mat3.T*mat2.T+mat4 

Also alles, was ich wirklich tun möchte, ist, die Iterationen dieser Schleife parallel auf einem Quad-Core-Computer zu verarbeiten. Ich habe hier und andere Orte auf dem Multiprocessing-Modul gelesen und es scheint, die Rechnung perfekt zu passen, außer für das erforderliche:

  if __name__ == '__main__' 

Von dem, was ich verstehe das bedeutet, dass man nur Multiprozess-Code aus einem Skript laufen kann? Dh wenn ich so etwas mache:

  import multiprocessing from numpy.random import randn a = randn(100,100) b = randn(100,100) c = randn(100,100) d = randn(100,100) def process_matrix(mat): return mat^2 if __name__=='__main__': print "Multiprocessing" jobs=[] for input_matrix in [a,b,c,d]: p = multiprocessing.Process(target=process_matrix,args=(input_matrix,)) jobs.append(p) p.start() 

Es läuft gut, aber vorausgesetzt, ich habe das obige als 'matrix_multiproc.py' gespeichert und eine neue Datei 'importing_test.py' definiert, die gerade sagt:

  import matrix_multiproc 

Das Multiprocessing geschieht nicht, weil der Name jetzt 'matrix_multiproc' ist und nicht ' main '

Heißt das, ich kann niemals eine Parallelverarbeitung auf einem importierten Modul verwenden? Alles, was ich versuche zu tun ist, ist mein Modell laufen wie:

  def Model_Run(): import Part1, Part2, Part3, matrix_multiproc, Part4 Part1.Run() Part2.Run() Part3.Run() matrix_multiproc.Run() Part4.Run() 

Tut mir leid für eine wirklich lange Frage, was wohl eine einfache Antwort ist, danke!

One Solution collect form web for “Importieren von Modulen, die MultiProcessing Python verwenden”

Heißt das, ich kann niemals eine Parallelverarbeitung auf einem importierten Modul verwenden?

Nein, das geht nicht Sie können multiprocessing überall in Ihrem Code verwenden, vorausgesetzt, dass das Hauptmodul des Programms den if __name__ == '__main__' guard verwendet.

Bei Unix-Systemen brauchst du diesen Wächter nicht einmal, da er den fork() Systemaufruf zur Erstellung von untergeordneten Prozessen aus dem python Prozess aufweist.

Auf Windows hingegen wird die fork() durch multiprocessing emuliert, indem ein neuer Prozess, der das Hauptmodul erneut betreibt, mit einem anderen __name__ . Ohne die Wache hier, wird Ihre Hauptanwendung versuchen, neue Prozesse wieder aufzutreiben, was zu einer endlosen Schleife führt, und das Essen des ganzen Gedächtnisses Ihres Computers ziemlich schnell.

  • Parallelisierung einer Schleife in Python 2.4
  • Python-Multiprocessing im Kolben
  • Paralleles Tabellen-Update mit Python-Multiprocessing (PostGIS / PostgreSQL)
  • Verarbeitungsergebnisse von asyncmap, wie sie kommen
  • Drucken in Stdout in IPython-Parallelprozessen
  • Python Access Parallel Port
  • Löschen Sie Speicher in der Pythonschleife
  • Aufruf von numpy auf parallele Prozessoren in IJulia Notebook
  • Parallele Verarbeitung in Python
  • Verwenden des Multiprocessing-Moduls für Cluster-Computing
  • Django und Parallelverarbeitung:
  • Python ist die beste Programmiersprache der Welt.