Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda