Ich habe versucht, meinen ersten Versuch an einem Thread-Skript zu machen. Es wird schließlich ein Web-Scraper sein, der hoffentlich ein wenig schneller arbeitet als das ursprüngliche lineare Scraping-Skript, das ich zuvor gemacht habe.Python Threading/Thread-Implementierung
Nach Stunden des Lesens und Spielen mit einigen Beispielcode. Ich bin mir immer noch nicht sicher, was als richtig angesehen wird, soweit eine Implementierung geht.
Zur Zeit habe ich den folgenden Code, die ich mit gespielt:
from Queue import Queue
import threading
def scrape(queue):
global workers
print worker.getName()
print queue.get()
queue.task_done()
workers -= 1
queue = Queue(maxsize=0)
threads = 10
workers = 0
with open('test.txt') as in_file:
for line in in_file:
queue.put(line)
while not (queue.empty()):
if (threads != workers):
worker = threading.Thread(target=scrape, args=(queue,))
worker.setDaemon(True)
worker.start()
workers += 1
Die Idee ist, dass ich eine Liste von URLs in der test.txt-Datei haben. Ich öffne die Datei und lege alle URLs in die Warteschlange. Von dort bekomme ich 10 Threads, die aus der Warteschlange ziehen und eine Webseite abkratzen, oder in diesem Beispiel einfach die gezogene Zeile ausdrucken.
Sobald die Funktion fertig ist, entferne ich einen "Worker Thread" und dann ersetzt ein neuer es, bis die Warteschlange leer ist.
In meiner realen Welt Implementierung irgendwann werde ich die Daten aus meiner Funktion scrapes nehmen und es in eine .csv-Datei schreiben müssen. Aber im Moment versuche ich nur zu verstehen, wie man die Threads korrekt implementiert.
Ich habe ähnliche Beispiele wie oben gesehen, die 'Thread' verwenden ... und ich habe auch 'threading' Beispiele gesehen, die eine geerbte Klasse verwenden. Ich möchte nur wissen, was ich verwenden soll und wie man es richtig handhaben kann.
Gehen Sie einfach auf mich hier, Im nur ein Anfänger versucht, Threads zu verstehen .... und ja, ich weiß, dass es sehr kompliziert werden kann. Ich denke jedoch, dass dies für einen ersten Versuch einfach genug sein sollte ...
Threading im Allgemeinen ist ziemlich komplex und die meiste Zeit ist es einfacher, eine Abstraktionsbibliothek wie Multiprocessing (.dummy) oder concurrent.futures – janbrohl