Ich entwickle ein lang laufendes Python-Skript, das viele Verbindungen zu verschiedenen seriellen Ports herstellt. Das Skript stürzt einige Stunden nach seiner Ausführung mit dem Hinweis "Zu viele offene Dateien" ab.
Ich habe das Problem im seriellen Modul verfolgt, wo die Methode .close () anscheinend nicht die Anzahl der von python verwendeten Dateideskriptoren reduziert. Ich überprüfe das mit lsof | grep python | wc
. Mit Debian 7.2 & amp; Python 2.7.3
Im folgenden Beispiel werden langsam mehr und mehr Dateideskriptoren verwendet, bis das Limit erreicht ist. Warum ist das und wie kann ich es vermeiden?
%Vor%Danke
Es scheint, dass extra com.open
das Problem verursacht. Laut den Dokumenten serial.Serial
wird es geöffnet, sodass Sie es nicht öffnen müssen einmal mehr. In Linux (alle POSIXes, soweit ich weiß) erhöht open
nur den Zähler und schließt ihn nur herunter. Es gibt eine gelöschte Antwort von @wheaties mit with
, was ich auch empfehlen würde: