Das Lesen eines von urllib2 erstellten Streams wird nie wiederhergestellt, wenn die Verbindung unterbrochen wurde

8

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.)

    
Martin 01.05.2009, 13:51
quelle

2 Antworten

6

Versuchen Sie etwas wie:

%Vor%     
Alex Martelli 01.05.2009, 14:57
quelle
2

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%     
Nadia Alramli 01.05.2009 14:32
quelle

Tags und Links