Python schließt keine Dateideskriptoren

8

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

    
Shiftee 26.11.2013, 14:49
quelle

2 Antworten

5

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:

%Vor%     
khachik 26.11.2013, 15:52
quelle
1

Verwenden Sie finally , um sicherzustellen, dass der Port geschlossen ist.

%Vor%     
tim 26.11.2013 15:23
quelle

Tags und Links