Python-Prozess von urllib2 blockiert

8

Ich habe einen Prozess eingerichtet, der eine Warteschlange für eingehende URLs zum Download liest, aber wenn urllib2 eine Verbindung öffnet, hängt das System.

%Vor%

Von einem anderen Modul aus kann ich URLs hinzufügen, und wenn ich will, kann ich den Prozess stoppen und den Prozess abwarten.

%Vor%

Das Problem ist, dass, wenn ich urlopen ("response = urllib2.urlopen (request)") verwende, alles blockiert bleibt.

Es gibt kein Problem, wenn ich die download () -Funktion aufruft oder wenn ich nur Threads ohne Process verwende.

    
Davmuz 26.01.2010, 02:31
quelle

1 Antwort

4

Das Problem hier ist nicht urllib2, sondern die Verwendung des Multiprocessing-Moduls. Wenn Sie das Multiprocessing-Modul unter Windows verwenden, dürfen Sie keinen Code verwenden, der sofort beim Importieren Ihres Moduls ausgeführt wird. Stattdessen sollten Sie die Dinge im Hauptmodul in einen if __name__=='__main__' -Block einfügen. Siehe Abschnitt "Sicheres Importieren des Hauptmoduls" hier .

Nehmen Sie für Ihren Code diese Änderung im Downloader-Modul vor:

%Vor%

Und im Hauptmodul:

%Vor%

Da Sie dies nicht getan haben, wurde bei jedem Start des Subprozesses der Hauptcode erneut ausgeführt und ein anderer Prozess gestartet, der den Hang verursachte.

    
interjay 26.01.2010, 12:22
quelle