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.
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.
Tags und Links python multithreading urllib2 multiprocess