2013-04-08 6 views
33

Die Setuptools Dokumentation nur heißt es:Was ist der Vorteil, wenn zip_safe beim Packen eines Python-Projekts auf True gesetzt wird?

Für maximale Leistung, Pakete Python am besten als Zip-Dateien installiert sind. Nicht alle Pakete können jedoch in komprimierter Form ausgeführt werden, da sie möglicherweise erwarten können, entweder auf Quellcode oder Datendateien als normale Betriebssystemdateien zuzugreifen. Daher können setuptools Ihr Projekt als ZIP-Datei oder als Verzeichnis installieren. Die Standardauswahl wird vom zip_safe-Flag des Projekts (reference) bestimmt.

In der Praxis, was ist der Leistungsvorteil? Ist es eine Untersuchung wert, wenn meine Projekte zip-sicher sind oder sind die Vorteile generell minimal?

Antwort

13

Zip-Dateien belegen weniger Speicherplatz auf der Festplatte, was bedeutet, dass sie schneller von der Festplatte gelesen werden können. Da die meisten Dinge I/O-gebunden sind, kann der Aufwand beim Dekomprimieren der Paketierung geringer sein als der Overhead beim Lesen einer größeren Datei von der Platte. Darüber hinaus ist es wahrscheinlich, dass eine einzelne, kleinräumige Zip-Datei sequenziell auf der Festplatte gespeichert wird, während eine Sammlung kleinerer Dateien mehr verteilt sein kann. Bei Rotationsmedien erhöht dies auch die Leseleistung, indem die Anzahl der Suchvorgänge verringert wird. So optimieren Sie im Allgemeinen Ihre Festplattennutzung auf Kosten von etwas CPU-Zeit, was Ihre import und Ladezeiten dramatisch verbessern kann.

+0

Nur ein Hinweis: Wenn Sie sich über schnelle Ladezeiten für den Import Gedanken machen, ist es vielleicht besser, darüber nachzudenken. Vermeiden Sie oft den Python-Interpreter zu laden! Beispiel: Ein Python-Interpreter kann mehrere Web-Anfragen nacheinander bearbeiten. – guettli

+1

Diese Antwort ist im besten Fall unvollständig, da sie nur eine kleine Teilmenge der Gründe erwähnt, warum eine .egg-Datei zu einer besseren Leistung führen kann. –

5

Zusätzlich zu den bereits erwähnten gibt es mehrere Vorteile.

Eine einzelne große .egg-Datei lesen (und entpacken) kann erheblich schneller sein als das Laden mehrerer (möglicherweise eine Menge) kleinerer .py-Dateien, abhängig vom Speichermedium/Dateisystem auf dem sie sich befindet.

Einige Dateisysteme haben eine große Blockgröße (z. B. 1 MB), was bedeutet, dass der Umgang mit kleinen Dateien teuer sein kann. Obwohl Ihre Dateien klein sind (z. B. 10 KB), laden Sie möglicherweise einen 1-MB-Block von der Festplatte, wenn Sie sie lesen. Normalerweise kombinieren Dateisysteme mehrere kleine Dateien in einem großen Block, um dies ein wenig zu verringern.

In Dateisystemen, in denen der Zugriff auf Dateimetadaten langsam ist (was manchmal bei gemeinsam genutzten Dateisystemen wie NFS passiert), kann der Zugriff auf eine große Anzahl von Dateien ebenfalls sehr teuer sein.

Natürlich hilft auch das Zippen des ganzen Bündels, da das bedeutet, dass insgesamt weniger Daten gelesen werden müssen.

Lange Rede, kurzer Sinn: Es kann sehr wichtig sein, wenn Ihr Dateisystem für eine kleine Menge großer Dateien besser geeignet ist.

Verwandte Themen