Heim >Backend-Entwicklung >Python-Tutorial >Wann sollte ich Pythons ThreadPool anstelle von multiprocessing.Pool verwenden?
Threading-Pools in Python: Eine Alternative zum Multiprocessing-Pool
Die Pool-Klasse des Multiprocessing-Moduls bietet eine praktische Möglichkeit, Code mithilfe von Arbeitsprozessen zu parallelisieren . Für bestimmte Anwendungsfälle kann es jedoch wünschenswert sein, Threads anstelle von Prozessen zu nutzen. In diesem Artikel wird eine alternative Thread-basierte Pool-Schnittstelle untersucht, die im Multiprocessing-Modul verfügbar ist.
Problemstellung:
Ein Benutzer sucht nach einer Python-Bibliothek, die eine „Pool“-Klasse bietet zum Threading von Arbeitsprozessen, ähnlich der Pool-Klasse des Multiprocessing-Moduls. Dies würde eine einfache Parallelisierung von Aufgaben ähnlich dem folgenden Beispiel mithilfe des Multiprocessing-Pools ermöglichen:
def long_running_func(p): c_func_no_gil(p) p = multiprocessing.Pool(4) xs = p.map(long_running_func, range(100))
Der Benutzer möchte jedoch den mit der Erstellung neuer Prozesse verbundenen Mehraufwand vermeiden.
Lösung:
Das Multiprocessing-Modul enthält eine Thread-basierte Pool-Schnittstelle, die es wert ist, erkundet zu werden. Diese wenig bekannte Schnittstelle kann mit der ThreadPool-Klasse aus dem Modul multiprocessing.pool importiert werden:
from multiprocessing.pool import ThreadPool
Hinter den Kulissen verwendet diese ThreadPool-Klasse eine Dummy-Process-Klasse, die einen Python-Thread umschließt. Diese Dummy-Prozessklasse ist im Modul multiprocessing.dummy implementiert, das eine vollständige Multiprocessing-Schnittstelle basierend auf Threads bietet.
Beispielverwendung:
Um den ThreadPool zu verwenden, instanziieren ein ThreadPool-Objekt mit der gewünschten Anzahl von Arbeitsthreads. Rufen Sie dann die Map-Methode auf, um eine Funktion über die Arbeitsthreads hinweg zu parallelisieren.
# Create a ThreadPool with 4 worker threads pool = ThreadPool(4) # Parallelize the `long_running_func` on 100 inputs results = pool.map(long_running_func, range(100))
Das obige ist der detaillierte Inhalt vonWann sollte ich Pythons ThreadPool anstelle von multiprocessing.Pool verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!