0

Ich brauche Selen für einen Scraping-Job mit einem Haufen Javascript-Webseiten generiert. Ich kann mehrere Instanzen des Webdrivers gleichzeitig öffnen und die Websites mithilfe der Warteschlange an die Instanzen übergeben.Threading oder Multiprocessing für Webscraping mit Selen

Es kann jedoch in mehrfacher Weise durchgeführt werden. Ich habe sowohl mit dem Threading-Modul als auch mit den Pool- und Prozesswegen aus dem Multiprocessing-Modul experimentiert.

Alle arbeiten und werden den Job ziemlich schnell erledigen.

Das lässt mich fragen: Welches Modul ist in einer solchen Situation bevorzugt?

+0

Threads sind einfacher zu koordinieren und verwenden weniger Speicher als Prozesse. Aber es liegt an dir, es gibt keinen bevorzugten Weg. – freakish

Antwort

1

Der Hauptfaktor in CPython für die Auswahl zwischen Threads von Prozessen hängt von Ihrer Art der Auslastung ab.

Wenn Sie eine E/A-gebundene Art von Arbeitslast haben, bei der die meiste Zeit Ihrer Anwendung darauf wartet, dass Daten ein- oder ausgehen, sollten Sie Threads verwenden.

Wenn Ihre Anwendung stattdessen viel Zeit mit der CPU verbringt, dann sind Prozesse Ihr Werkzeug der Wahl.

Dies ist aufgrund der Tatsache, dass in CPython (der am häufigsten verwendeten Interpreter) nur ein Thread zu einem Zeitpunkt die CPU-Kerne verwenden kann. Weitere Informationen zu dieser Einschränkung finden Sie in der Global Interpreter Lock (GIL).

Es gibt einen weiteren Vorteil bei der Verwendung von Prozessen, der normalerweise übersehen wird: Prozesse ermöglichen einen höheren Grad an Isolation. Das bedeutet, dass wenn Sie einen instabilen Code haben (in Ihrem Fall könnte das die Scraping-Logik sein), der hängen bleibt oder schlecht abstürzt, kann Ihr Service durch die Kapselung in einem separaten Prozess die Anomalie erkennen und wiederherstellen (den Prozess beenden und neu starten).