Python-Multiprocessing: Was ist der Unterschied zwischen map und imap?
Ich versuche zu lernen, wie man Python-multiprocessing-Paket, aber ich verstehe nicht den Unterschied zwischen map
und imap
.
Ist der Unterschied, dass map
gibt, sagen wir, eine tatsächliche array oder set, während imap
gibt einen iterator über ein array oder set? Wenn würde ich einen über den anderen?
Auch, ich verstehe nicht, was die chunksize argument ist. Ist das die Anzahl der Werte, die übergeben werden, um jeden Prozess?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass ist der Unterschied. Ein Grund, warum Sie möglicherweise verwenden Sie imap anstelle von anzeigen, wenn Sie wollten, um die Bearbeitung zu starten, die ersten paar Ergebnisse, ohne zu warten, für den rest berechnet werden. Karte wartet für jedes Ergebnis vor der Rückkehr.
Als für chunksize, manchmal ist es effizienter, dole out Arbeit in größeren Mengen, da jedes mal, wenn der Arbeiter fordert mehr Arbeit, es ist IPC und Synchronisation-overhead.
chunksize == len(iterable)
eine schlechte Idee, oder ist es?)chunksize = len(iterable)
ist, dann werden alle jobs zugewiesen werden, um einen einzigen Prozess!len(iterable) // numprocesses
ist die maximale, die nützlich ist. Der Kompromiss ist zwischen Synchronisations-overhead und cpu-Auslastung (große chunksizes wird dazu führen, dass einige Prozesse zu beenden, bevor andere, verschwenden Potenzial Bearbeitungszeit).imap
gibt das erste Ergebnis aus der x Anzahl der Laufenden Prozesse? d.h. muss es behalten, um? Heißt das, dass du noch warten, bis der erste Prozess abgeschlossen ist, bevor Sie beginnen können, die iteration über die Ergebnisse?imap ist aus dem itertools-Modul das verwendet wird für die schnelle und Speicher-Effizienz in python.Karte zurückgeben der Liste wo als imap gibt das Objekt zurück,, das generiert die Werte für die einzelnen Iterationen(In python 2.7).Die folgenden code-Blöcke werden klar den Unterschied.
Karte gibt die Liste kann direkt gedruckt werden
imap-Objekt gibt Umgerechnet auf Liste und gedruckt.
Chunksize machen die iterierbar zu sein, aufgeteilt in Teile der angegebenen Größe(ungefähr) und jedes Stück vorgelegt, als eine separate Aufgabe.
Mit imap -, Gabel-Anrufe werden parallel durchgeführt, nicht eine nach der anderen sequentiell.
Zum Beispiel, unten sind Sie zu schlagen, sagen drei Austausch zu bekommen, um Bücher.
Drücken Sie anstelle des Schlagens exchange 1, dann exchange 2, dann exchange 3 sequentiell, imap.pool-Aufrufe sind nicht-blockierend und geht direkt zu allen drei Börsen zu Holen, um Bücher, sobald Sie anrufen.