tempfile.mkstemp too many open files
Verfasst: Mittwoch 15. Mai 2013, 17:26
Hallo,
folgende Situation. Über einen XML Gatway werden mehrere tausend XML-Dateien abgefragt. Diese werden dann mit SAX verarbeitet. Dafür muss ich die Dateien kurz zwischenspeichern. Mittels mkstemp erzeuge ich mir das File, speichere die Daten und lösche die Datei wieder. Trotzdem kommt nach einiger Zeit der Fehler "too many open files". Der Nachfolgende Code ist beispielhaft (die Schleife gibt es sonst nicht), illustriert aber mein Problem:
Wenn ich aber folgenden Code verwende kommt keine Fehlermeldung. Kann man gut nachvollziehen wenn man in /proc/PID/fd nachschaut. Bei obigen Code steht jedes tempfile als deleted da. Bei unterem Code sehe ich kein File.
Kann mir bitte jemand erklären warum ich mit obigen Code in "too many open files" renne und mit unterem nicht?
Grüße
folgende Situation. Über einen XML Gatway werden mehrere tausend XML-Dateien abgefragt. Diese werden dann mit SAX verarbeitet. Dafür muss ich die Dateien kurz zwischenspeichern. Mittels mkstemp erzeuge ich mir das File, speichere die Daten und lösche die Datei wieder. Trotzdem kommt nach einiger Zeit der Fehler "too many open files". Der Nachfolgende Code ist beispielhaft (die Schleife gibt es sonst nicht), illustriert aber mein Problem:
Code: Alles auswählen
#/usr/bin/env python
import tempfile
import os
import time
for i in range(1,1025):
__, tmp_name = tempfile.mkstemp()
with open(tmp_name, 'wb') as f:
f.write("Hello World")
#sax.parse(tmp_name, ContentHandler())
os.remove(tmp_name)
time.sleep(1)
Code: Alles auswählen
#/usr/bin/env python
import tempfile
import os
import time
for i in range(1,1025):
outfd, tmp_name = tempfile.mkstemp()
outsock = os.fdopen(outfd, 'wb')
outsock.write("Hello World")
outsock.close()
#sax.parse(tmp_name, ContentHandler())
os.remove(tmp_name)
time.sleep(1)
Grüße