que length instalar disable como python windows memory file-io numpy

length - Límites de memoria de Python de 32 bits en ventanas de 64 bits



instalar python en windows 10 (1)

No sé por qué crees que tu proceso debería poder acceder a 4GB. De acuerdo con los Límites de memoria para las versiones de Windows en MSDN, en Windows 7 de 64 bits, un proceso predeterminado de 32 bits obtiene 2GB. * Que es exactamente donde se está acabando.

Entonces, ¿hay una manera de evitar esto?

Bueno, podría hacer una compilación personalizada de Python de 32 bits que use el indicador IMAGE_FILE_LARGE_ADDRESS_AWARE y reconstruir el numpy y todos sus otros módulos de extensión. No puedo prometer que todo el código relevante sea realmente seguro de ejecutarse con el indicador de dirección grande; hay una buena probabilidad de que lo sea, pero a menos que alguien ya lo haya hecho y probado, "una buena probabilidad" es lo mejor que todos puedan saber.

O, más obviamente, simplemente use Python de 64 bits en su lugar.

La cantidad de RAM física es completamente irrelevante. Parece que piensas que tienes un "límite de 8 GB" con 8 GB de RAM, pero no es así como funciona. Su sistema toma toda su RAM más el espacio de intercambio que necesita y lo divide entre aplicaciones; una aplicación puede obtener 20 GB de memoria virtual sin un error de memoria, incluso en una máquina de 8 GB. Y mientras tanto, una aplicación de 32 bits no tiene forma de acceder a más de 4 GB, y el sistema operativo utilizará parte de ese espacio de direcciones (la mitad de manera predeterminada, en Windows), por lo que solo puede obtener 2 GB incluso en una máquina de 8 GB Eso no está ejecutando nada más. (No es posible que nunca se pueda "ejecutar cualquier otra cosa" en un sistema operativo moderno, pero sabes a qué me refiero).

Entonces, ¿por qué esto funciona en tu caja de Linux?

Debido a que su caja de Linux está configurada para dar a los procesos de 32 bits 3,5 GB de espacio de direcciones virtuales, o 3,99 GB, o ... Bueno, no puedo decirle el número exacto, pero todas las distribuciones que he visto durante muchos años se han configurado Por lo menos 3.25GB.

* También tenga en cuenta que ni siquiera obtiene esos 2GB completos para sus datos; su programa La mayoría de lo que el sistema operativo y sus controladores hacen accesible a su código se encuentra en la otra mitad, pero algunos bits se encuentran en su mitad, junto con cada DLL que cargue y el espacio que necesiten, y varias otras cosas. No suma demasiado, pero no es cero.

Estoy teniendo un problema de memoria que parece que no puedo entender.

Estoy en una máquina de Windows 7 de 64 bits con 8 GB de memoria y ejecutando un programa python de 32 bits.

Los programas leen 5,118 archivos comprimidos (npz). Windows informa que los archivos ocupan 1.98 GB en el disco

Cada archivo npz contiene dos datos: ''arr_0'' es de tipo np.float32 y ''arr_1'' es de tipo np.uint8

La secuencia de comandos de Python lee cada archivo agrega sus datos en dos listas y luego cierra el archivo.

Alrededor del archivo 4284/5118, el programa lanza una excepción de memoria.

Sin embargo, el administrador de tareas dice que el uso de la memoria de python.exe * 32 cuando ocurre el error es 1,854,848K ~ = 1.8GB. Mucho menos que mi límite de 8 GB, o el supuesto límite de 4 GB de un programa de 32 bits.

En el programa detecto el error de memoria e informa: Cada lista tiene una longitud de 4285. La primera lista contiene un total de 1,928,588,480 de float32 ~ = 229.9 MB de datos. La segunda lista contiene 12,342,966,272 datos de uint8 ~ = 1,471.3MB.

Entonces, todo parece estar saliendo. Excepto por la parte donde obtengo un error de memoria. Absolutamente tengo más memoria, y el archivo en el que se bloquea es de ~ 800 KB, por lo que no falla al leer un archivo enorme.

Además, el archivo no está dañado. Puedo leerlo bien, si no uso toda esa memoria de antemano.

Para hacer las cosas más confusas, todo esto parece funcionar bien en mi máquina Linux (aunque tiene 16 GB de memoria en comparación con 8 GB en mi máquina con Windows), pero aún así, no parece ser la memoria RAM de la máquina. causando este problema

¿Por qué Python está lanzando un error de memoria, cuando espero que pueda asignar otros 2GB de datos?