compile - ¿Cuál es la ventaja de establecer zip_safe en True al empaquetar un proyecto de Python?
setuptools python (2)
La documentación de setuptools solo indica:
Para un rendimiento máximo, los paquetes de Python se instalan mejor como archivos zip. Sin embargo, no todos los paquetes son capaces de ejecutarse en forma comprimida, ya que es probable que puedan acceder al código fuente o a los archivos de datos como archivos normales del sistema operativo. Por lo tanto, setuptools puede instalar su proyecto como un archivo zip o un directorio, y su opción predeterminada está determinada por el indicador zip_safe del proyecto ( reference ).
En términos prácticos, ¿cuál es el beneficio de rendimiento obtenido? ¿Vale la pena investigar si mis proyectos son seguros, o son los beneficios generalmente mínimos?
Hay varias ventajas, además de las ya mencionadas.
Leer un único archivo .egg grande (y descomprimirlo) puede ser significativamente más rápido que cargar múltiples (posiblemente muchos) archivos .py más pequeños, dependiendo del medio de almacenamiento / sistema de archivos en el que reside.
Algunos sistemas de archivos tienen un gran tamaño de bloque (por ejemplo, 1 MB), lo que significa que manejar archivos pequeños puede ser costoso. Aunque sus archivos son pequeños (digamos, 10KB), en realidad puede estar cargando un bloque de 1MB desde el disco al leerlo. Normalmente, los sistemas de archivos combinan múltiples archivos pequeños en un bloque grande para mitigarlo un poco.
En los sistemas de archivos donde el acceso a los metadatos de los archivos es lento (lo que a veces ocurre con los sistemas de archivos compartidos, como NFS), el acceso a una gran cantidad de archivos también puede ser muy costoso.
Por supuesto, comprimir todo el conjunto también ayuda, ya que eso significa que habrá que leer menos datos en total.
Para resumir: puede importar mucho si su sistema de archivos es más adecuado para una pequeña cantidad de archivos de gran tamaño.
Los archivos Zip ocupan menos espacio en el disco, lo que también significa que se leen más rápidamente desde el disco. Como la mayoría de las cosas están vinculadas con E / S, la sobrecarga al descomprimir el paquete puede ser menor que la sobrecarga al leer un archivo más grande del disco. Además, es probable que un archivo zip simple y pequeño se almacene secuencialmente en el disco, mientras que una colección de archivos más pequeños puede estar más dispersa. En medios rotativos, esto también aumenta el rendimiento de lectura reduciendo el número de búsquedas. Por lo tanto, generalmente optimiza el uso del disco a costa de un poco de tiempo de CPU, lo que puede mejorar drásticamente import
tiempos de import
y carga.