Mehrere URLs gleichzeitig abrufen / parallel [duplizieren]

8

Ich habe ein Python-Skript, das die Webseite herunterlädt, analysiert und einen Wert von der Seite zurückgibt. Ich brauche ein paar solcher Seiten, um das Endergebnis zu erhalten. Jeder Seitenabruf dauert lange (5-10s) und ich würde lieber parallel Anfragen stellen, um die Wartezeit zu verkürzen.
Die Frage ist - welcher Mechanismus wird es schnell, korrekt und mit minimaler CPU / Speicherverschwendung machen? Twisted, Asyncore, Threading, etwas anderes? Können Sie einen Link zu Beispielen bereitstellen?
Danke

UPD: Es gibt ein paar Lösungen für das Problem, ich suche nach dem Kompromiss zwischen Geschwindigkeit und Ressourcen. Wenn Sie einige Erfahrung Details erzählen könnten - wie es aus Ihrer Sicht schnell unter Last ist - es wäre sehr hilfreich.

    
DominiCane 20.08.2010, 12:50
quelle

3 Antworten

13

multiprocessing.Pool kann ein guter Deal sein, es gibt einige nützliche Beispiele . Wenn Sie beispielsweise eine Liste von URLs haben, können Sie den Abruf von Inhalten gleichzeitig abbilden:

%Vor%     
pygabriel 20.08.2010, 13:08
quelle
3

multiprocessing

Erstellen Sie eine Reihe von Prozessen, einen für jede URL, die Sie herunterladen möchten. Verwenden Sie Queue , um eine Liste von URLs zu speichern, und lassen Sie die Prozesse eine URL aus der Warteschlange lesen, verarbeiten und einen Wert zurückgeben.

    
katrielalex 20.08.2010 12:52
quelle
1

Verwenden Sie dafür ein asynchrones, d. h. ereignisgesteuertes statt blockierendes Netzwerk-Framework. Eine Möglichkeit besteht darin, twisted zu verwenden . Eine andere Option, die kürzlich verfügbar wurde, ist die Verwendung von Monokel. Dieses Mini-Framework versteckt die Komplexität nicht blockierender Operationen. Sehen Sie dieses Beispiel . Es kann verdreht oder Tornado hinter den Kulissen verwenden, aber Sie bemerken nicht viel davon.

    
loevborg 20.08.2010 14:25
quelle