2012-04-02 12 views
2

ich einen Web-Crawler schreibe, die mehrere URLs gleichzeitig verarbeitet und arbeitet in folgender Weise:Verarbeitungsreihenfolge der Pythons Threading-Modul

  1. Es wird eine URL aus einer Liste von URLs in seed_list enthalten. txt,

  2. Es crawlt es und schreibt die Daten in data.txt;

genauso wie die meisten Webcrawler arbeiten.

Wenn ich single-threaded mache, kann ich die Daten in data.txt in der gleichen Reihenfolge wie die URLs in seed_list.txt bekommen, aber wenn es Multithreading ist, scheint ich nicht in der Lage zu kontrollieren es, wie jeder Thread schreibt die Daten in data.txt, sobald es fertig ist.

Gibt es eine Möglichkeit, meinen Web-Crawler Multi-Threading zu machen, aber die ursprüngliche Reihenfolge beibehalten?

Vielen Dank!


@Lance, Ignacio und Maksym,

danke Ihnen allen für Ihre Hilfe - Ihre Antworten mich auf jeden Fall in die richtige Richtung weisen.

Antwort

1

Sie könnten eine Klasse erstellen, die eine Indexnummer der Zeile von seed_list.txt, die URL und wo die Daten aus dem Web hat. Ein Objekt dieses Typs kann mit der Zeilennummer und URL erstellt werden, dann wird es an den Worker-Thread übergeben, der die Daten in das Objekt einfügt, und dann wird das Objekt an einen Schreib-Thread übergeben, der die Objekte nach der Zeile sortiert Nummer und geben Sie die Daten nach Bedarf aus.

+0

Vielen Dank für mich in die richtige Richtung. – BananaOnTheWall

2

Erstellen Sie einen zusätzlichen Thread, der für das Auflisten der Ergebnisse aus den einzelnen Crawler-Threads verantwortlich ist.

1

Sie können einen speziellen Thread ausführen, der Daten ausgibt und mit ihm über eine Warteschlange interagiert. Ich meine, Ihr "Crawling" -Thread wird kein Ergebnis in eine Textdatei schreiben, sondern in die Warteschlange stellen.

Dieser 'Ausgabe'-Thread kann Ihre Ergebnisse sortieren/filtern.