2015-10-30 10 views
7

Ich bin mir nicht sicher, wann ich Pool von Arbeitern gegen mehrere Prozesse verwenden soll.Python Was ist der Unterschied zwischen einem Pool von Worker-Prozessen und dem Ausführen mehrerer Prozesse?

processes = [] 

for m in range(1,5): 
     p = Process(target=some_function) 
     p.start() 
     processes.append(p) 

for p in processes: 
     p.join() 

vs

if __name__ == '__main__': 
    # start 4 worker processes 
    with Pool(processes=4) as pool: 
     pool_outputs = pool.map(another_function, inputs) 

Antwort

4

Wie es heißt on PYMOTW:

Die Pool-Klasse kann eine feste Anzahl von Arbeitern für einfache Fälle zu verwalten verwendet werden, wo die Arbeit kann getan werden, zerbrochen sein und verteilt auf Arbeiter unabhängig voneinander.

Die Rückgabewerte der Jobs werden gesammelt und als Liste zurückgegeben.

Die Poolargumente enthalten die Anzahl der Prozesse und eine Funktion, die ausgeführt wird, wenn der Taskprozess gestartet wird (einmal pro Kind aufgerufen).

Bitte werfen Sie einen Blick auf die dort angegebenen Beispiele, um die Anwendung, Funktionalitäten und Parameter besser zu verstehen.

Grundsätzlich ist der Pool ein Helfer, der das Management der Prozesse (Workers) erleichtert, wenn sie nur gemeinsame Eingabedaten konsumieren, parallel verarbeiten und eine gemeinsame Ausgabe erstellen müssen.

Der Pool hat durchaus ein paar Dinge, die man sonst selbst (nicht zu hart, aber immer noch, es ist bequem, eine vorgekochten Lösung zu finden) Code sollte

dh

  • die Aufspaltung der Eingabedaten
  • Die Zielprozessfunktion ist vereinfacht: Sie kann so entworfen werden, dass nur ein Eingabeelement erwartet wird. Der Pool wird es nennen, jedes Element aus der mit dem Arbeitnehmer für die Arbeiter wartet
  • zugewiesen Teilmenge bereitstellt, ihre Arbeit zu beenden (dh Verbinden die Prozesse)
  • ...
  • die Ausgabe jeden Arbeiter zu verschmelzenden produzieren die endgültige Ausgabe
+0

tl; dr-Version: Verwenden Sie Pool für eine einfache Implementierung der Datenparallelität. Nicht allgemein anwendbar für Aufgabenparallelität. – RobertB

Verwandte Themen