Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

223
Vistas
OSError: [Errno 24] Demasiados archivos abiertos; en pitón; difícil de depurar

Estoy ejecutando un código que después de algunas horas, a veces minutos falla con el error

 OSError: [Errno 24] Too many open files

Y tengo verdaderos problemas para depurar esto. El error en sí siempre se desencadena por la línea marcada en el fragmento de código a continuación

 try: with open(filename, 'rb') as f: contents = f.read() <----- error triggered here except OSError as e: print("e = ", e) raise else: # other stuff happens

Sin embargo, no veo ningún problema en esta parte del código (¿verdad?), así que supongo que otras partes del código no cierran los archivos correctamente. Sin embargo, aunque abro archivos bastante, siempre los abro con la declaración 'con', y entiendo que incluso si ocurre un error, los archivos se cerrarán (¿verdad?). Así que otra parte de mi código se ve así

 try: with tarfile.open(filename + '.tar') as tar: tar.extractall(path=target_folder) except tarfile.ReadError as e: print("e = ", e) except OSError as e: print("e = ", e) else: # If everything worked, we are done return

El código anterior se encuentra con un ReadError con bastante frecuencia, pero incluso si eso sucede, el archivo debe cerrarse, ¿verdad? Entonces, simplemente no entiendo cómo puedo encontrarme con demasiados archivos abiertos. Lo siento, esto no es reproducible para usted, ya que no puedo depurarlo lo suficiente, solo busco algunos consejos aquí, ya que estoy perdido. Cualquier ayuda es apreciada...

Editar: estoy en un macbook. Aquí está la salida de ulimit -a

 core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 256 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 1418 virtual memory (kbytes, -v) unlimited

Siguiendo la sugerencia de @ sj95126, cambié el código relacionado con el archivo tar a algo que asegura que el archivo esté cerrado

 try: tar = tarfile.open(filename + '.tar') tar.extractall(path=target_folder) except tarfile.ReadError as e: print("tarfile.ReadError e = ", e) except OSError as e: print("e = ", e) else: # If everything worked, we are done return finally: print("close tar file") try: tar.close() except: print("file already closed")

pero no resolvió el problema.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

en los unix/linux hay un comando con el que puede verificar el número total de file locks o el límite open files usando ulimit -a . en la situación de @carl, el resultado fue:

 core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 256 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 1418 virtual memory (kbytes, -v) unlimited

como puede ver, los open files o file locks son iguales a 256 :

 open files (-n) 256

que es un valor muy small

El archivo de @carl contenía al menos más de 256 archivos; por lo que python estaba abriendo cada archivo usando un controlador de archivos, lo que luego da como resultado un system file lock (para abrir un archivo en un sistema necesita un bloqueo de archivos, como un puntero a ese archivo; para acceder a los datos, haga lo que quiera )

la solución es hacer que open files tengan un valor unlimited o very big .

de acuerdo con esta respuesta de pila , así es como puede cambiar el límite

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda