J'ai écrit une sorte de suite de tests qui nécessite beaucoup de fichiers. Après un certain temps (2h) j'obtiens un IOError: [Errno 24] Too many open files: '/tmp/tmpxsqYPm'
. J'ai vérifié toutes les poignées de fichier si je les referme. Mais l'erreur existe toujours.Trop de fichiers ouverts en python
J'ai essayé de calculer le nombre de descripteurs de fichiers autorisés en utilisant resource.RLIMIT_NOFILE
et le nombre de desciptors de fichiers actuellement ouverts:
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
Donc, si je lance le test suivant:
print get_open_fds()
for i in range(0,100):
f = open("/tmp/test_%i" % i, "w")
f.write("test")
print get_open_fds()
Je reçois cette sortie:
[]
/tmp/test_0
[3]
/tmp/test_1
[4]
/tmp/test_2
[3]
/tmp/test_3
[4]
/tmp/test_4
[3]
/tmp/test_5
[4] ...
C'est étrange, je m'attendais à un n nombre croissant de descripteurs de fichiers ouverts. Est-ce que mon script est correct? J'utilise le logger et le sous-processus de python. Serait-ce la raison de ma fuite fd?
Merci, Daniel
s'il vous plaît cat/proc/sys/fs/file-max et cat/proc/sys/fs/file-nr –
Vous devez utiliser 'resource.getrlimit (resource.RLIMIT_NOFILE) '. 'resource.RLIMIT_NOFILE' est juste un constanct pour accéder à l'information. – chuck
Est-ce que subprocess.Popen pourrait causer des problèmes similaires? – Joe