Ein Thread-basierter Pool: Eine Alternative zum Multiprocessing-Pool
Multiprocessing in Python bietet einen leistungsstarken Mechanismus für die parallele Verarbeitung mit mehreren Prozessen. Die Klasse multiprocessing.Pool bietet eine praktische Schnittstelle zum Verwalten von Worker-Prozessen und zum Verteilen von Aufgaben. Wenn jedoch schwere Prozesse unerwünscht sind, gibt es dann eine ähnliche Lösung, die stattdessen Threads verwendet?
Ja, es gibt ein verstecktes Juwel im Multiprocessing-Modul, das Thread-basierte Parallelität bietet: die ThreadPool-Klasse. Um darauf zuzugreifen, importieren Sie es mit:
from multiprocessing.pool import ThreadPool
Die ThreadPool-Klasse umschließt eine Dummy-Process-Klasse, die intern einen Python-Thread ausführt. Dieser Ansatz ermöglicht eine Thread-basierte Multiprocessing-API, ähnlich der Standard-Pool-Klasse. Aber im Gegensatz zu Worker-Prozessen teilen sich Threads den Speicher, was möglicherweise den Overhead reduziert.
Die Verwendung dieses Thread-basierten ThreadPools spiegelt die des Standard-Pools wider. Um beispielsweise einen Kartenvorgang mithilfe von Threads zu parallelisieren:
def long_running_func(p): c_func_no_gil(p) pool = ThreadPool(4) xs = pool.map(long_running_func, range(100))
Beachten Sie, dass in diesem Szenario die GIL kein Problem darstellt, da die zugrunde liegende Funktion sie freigibt, bevor sie IO-gebundene Vorgänge ausführt. Bei E/A-intensiven Aufgaben kann der ThreadPool also eine deutliche Leistungssteigerung bieten und gleichzeitig den Aufwand für die Erstellung und Verwaltung von Prozessen vermeiden.
Das obige ist der detaillierte Inhalt vonGibt es ein Thread-basiertes Äquivalent zum Multiprocessing-Pool von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!