schrieb ich ein bisschen eine Testsuite, die stark intensive Datei protokolliert. Nach einiger Zeit (2h) bekomme ich eine IOError: [Errno 24] Too many open files: '/tmp/tmpxsqYPm'
. Ich habe alle Dateigriffe überprüft, ob ich sie wieder schließe. Aber der Fehler existiert immer noch.Zu viele offene Dateien in Python
Ich habe versucht, die Anzahl der erlaubten Datei-Deskriptoren, um herauszufinden, resource.RLIMIT_NOFILE
und die Anzahl der aktuell geöffnete Datei desciptors mit:
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
Also, wenn ich den folgenden Test durchgeführt:
print get_open_fds()
for i in range(0,100):
f = open("/tmp/test_%i" % i, "w")
f.write("test")
print get_open_fds()
ich dieser Ausgabe:
[]
/tmp/test_0
[3]
/tmp/test_1
[4]
/tmp/test_2
[3]
/tmp/test_3
[4]
/tmp/test_4
[3]
/tmp/test_5
[4] ...
das seltsame ist, erwartete ich ein n zunehmende Anzahl von geöffneten Dateideskriptoren. Ist mein Skript korrekt?
Ich verwende Python des Loggers und subprocess. Könnte das der Grund für mein fd-Leck sein?
Danke, Daniel
bitte cat/proc/sys/fs/file-max und cat/proc/sys/fs/file-nr –
Sie verwenden sollten 'resource.getrlimit (resource.RLIMIT_NOFILE) '. 'resource.RLIMIT_NOFILE' ist nur eine Konstante, um auf die Informationen zuzugreifen. – chuck
Würde subprocess.Popen ähnliche Probleme verursachen? – Joe