[Python-de] War die Idee mit Iteratoren/Generatoren wirklich so super?

Stefan Behnel python-de at behnel.de
Di Jul 25 04:41:18 EDT 2017


Thomas Güttler schrieb am 25.07.2017 um 10:14:
> Ich frage mich: Bringt der Einsatz von Iteratoren und Generatoren wirklich
> so viel?
> 
> Sicherlich gibt es extreme Beispiele bei denen die Datenmenge nicht in den
> Hauptspeicher passen würde.
> 
> Aber solche Datenmengen habe ich im PostgreSQL, und ich mache auch
> Schleifchen über alle Daten
> in der DB :-)
> 
> Wie seht ihr das?

Hauptspeicherengpässe sind das eine, aber auch bei nichtüberfließenden
Datenmengen können Generatoren deutlich schneller sein. Ihr Vorteil liegt
vor Allem in der effizienten Nutzung von Resourcen wenn ein Datenelement
nach dem anderen komplett (oder zumindest weitreichend) verarbeitet werden
kann, anstatt erst alle Elemente einmal durch die CPU zu ziehen, und dann
nochmal und nochmal. Und vielleicht nochmal.

Je nach Komplexität der Verarbeitung und dem Verhältnis von
Einzelelementgröße zu Gesamtdatengröße kann der Unterschied durchaus
frappierend sein. Obwohl es natürlich auch Fälle gibt, in denen Generatoren
den Code langsamer machen, z.B. weil das einzelne Durchreichen der Daten ja
auch zur Laufzeit beiträgt.

Na ja, und ich finde es irgendwie auch generell schwer zu verargumentieren,
dass Daten komplett im Speicher landen müssen, wenn sie auch wesentlich
speichersparender verarbeitet werden können (zumindest bei ähnlicher
Laufzeit, also insbesondere bei Dateiverarbeitung, Datenbankabfragen, I/O
halt). Meistens ist mein Code ja zur Laufzeit nicht auf der grünen Wiese
unterwegs.

Stefan


Mehr Informationen über die Mailingliste python-de