Beim Versuch, eine meiner Python-Anwendungen im Falle von Verbindungsunterbrechungen etwas robuster zu machen, entdeckte ich, dass das Aufrufen der Lesefunktion eines von urllib2 erzeugten http-Streams das Skript für immer blockieren kann.
Ich dachte, dass die Lesefunktion Timeout und schließlich eine Ausnahme auslösen wird, aber das ist nicht der Fall, wenn die Verbindung während eines Lesefunktionsaufrufs unterbrochen wurde.
Hier ist der Code, der das Problem verursacht:
%Vor%(Wenn Sie das Skript ausprobieren, müssen Sie die Verbindung wahrscheinlich mehrmals unterbrechen, bevor Sie den Zustand erreichen, von dem das Skript nie wiederhergestellt wird)
Ich habe das Skript über Winpdb angesehen und einen Screenshot des Zustands erstellt, aus dem das Skript nie wiederhergestellt wird (selbst wenn das Netzwerk wieder verfügbar ist).
Winpdb http://img10.imageshack.us/img10/6716/urllib2.jpg
Gibt es eine Möglichkeit, ein Python-Skript zu erstellen, das auch dann zuverlässig funktioniert, wenn die Netzwerkverbindung unterbrochen wurde? (Ich würde es vorziehen, dies in einem zusätzlichen Thread zu vermeiden.)
Gute Frage, ich wäre wirklich daran interessiert, eine Antwort zu finden. Die einzige Problemumgehung, an die ich denken könnte, ist die Verwendung des Signaltricks, der in python docs erläutert wird. In Ihrem Fall wird es eher wie folgt aussehen:
%Vor%