Escribí un tipo de paquete de prueba que requiere mucho uso de archivos. Después de un tiempo (2h) obtengo un IOError: [Errno 24] Too many open files: '/tmp/tmpxsqYPm'
. Comprobé dos veces todos los identificadores de archivo si los cierro nuevamente. Pero el error todavía existe.Demasiados archivos abiertos en python
Me trataron de averiguar el número de descriptores de archivos permitidos utilizando resource.RLIMIT_NOFILE
y el número de desciptors archivo abiertos actualmente:
def get_open_fds():
fds = []
for fd in range(3,resource.RLIMIT_NOFILE):
try:
flags = fcntl.fcntl(fd, fcntl.F_GETFD)
except IOError:
continue
fds.append(fd)
return fds
Así que si funciono con la siguiente prueba:
print get_open_fds()
for i in range(0,100):
f = open("/tmp/test_%i" % i, "w")
f.write("test")
print get_open_fds()
consigo esta salida:
[]
/tmp/test_0
[3]
/tmp/test_1
[4]
/tmp/test_2
[3]
/tmp/test_3
[4]
/tmp/test_4
[3]
/tmp/test_5
[4] ...
Eso es extraño, esperaba una n aumento en el número de descriptores de archivos abiertos. ¿Mi guión es correcto?
Estoy usando el registrador y el subproceso de Python. ¿Podría ser esa la razón de mi fuga de fd?
Gracias, Daniel
favor cat/proc/sys/fs/file-max y cat/proc/sys/fs/file-nr –
debe utilizar 'resource.getrlimit (resource.RLIMIT_NOFILE) '. 'resource.RLIMIT_NOFILE' es solo una constante para acceder a la información. – chuck
Subprocess.Popen causa problemas similares? – Joe