-3

Also ich habe mehrere Funktionen ausgeführt, jede Funktion nimmt einen Abschnitt aus der Million Zeile TXT-Datei. Jede Funktion hat eine for-Schleife, die durch jede Zeile in diesem Abschnitt der Million-Zeile-Datei läuft.Verbessern Sie die Geschwindigkeit beim Lesen sehr großer Dateien in Python

Es braucht Informationen aus diesen Zeilen, um zu sehen, ob es Informationen in 2 anderen Dateien entspricht, eine etwa 50.000-100.000 Zeilen lang, die andere etwa 500-1000 Zeilen lang. Ich überprüfte, ob die Zeilen übereinstimmen, indem Sie für Schleifen durch die anderen 2 Dateien laufen. Sobald die Informationen übereinstimmen, schreibe ich die Ausgabe in eine neue Datei, alle Funktionen schreiben in dieselbe Datei. Das Programm wird etwa 2.500 Zeilen pro Minute produzieren, wird aber langsamer, je länger es läuft. Wenn ich eine der Funktionen ausführe, geschieht dies in ungefähr 500 Minuten, aber wenn ich es mit 23 anderen Prozessen mache, macht es nur 2500 pro Minute, warum ist das so?

Weiß jemand, warum das passieren würde? Wie auch immer, ich könnte etwas importieren, um das Programm schneller laufen zu lassen, ich benutze bereits die Methode with "as file1:".

Können die Multiprozesse schneller ausgeführt werden?

+0

mehr Thread! = Schneller. Es hängt davon ab, wie viele Kerne Sie haben – Whitefret

+0

, wenn alle Ihre Daten in den Speicher passen können, könnten Sie versuchen, Ihre Daten mit Pandas Modul zu verarbeiten - es ist sehr schnell und sehr effizient. Vergessen Sie nicht das langsamste Teil - Disk-IO-System, es wird wahrscheinlich Ihr Engpass sein, nicht die Anzahl Ihrer Threads – MaxU

+0

1. Wie viele Kerne haben Sie? 2. Welchen Bruchteil der Gesamt-CPU verwendet dieser Prozess (wenn er nahe bei 100% liegt, dann werden mehr Kerne nicht helfen). 3. Wie kommen die Threads zum Anfang von "ihrer" Sektion? Wenn sie zuerst * n * Zeilen lesen müssen, bin ich überrascht, dass dies die Dinge nicht verlangsamt. –

Antwort

0

Der Thread kann nur Ihre Ressourcen verwenden. 4 Kerne = 4 Thread mit voller Ressource. Es gibt einige Fälle, in denen mehr Threads die Leistung verbessern können, aber dies ist bei Ihnen nicht der Fall. Behalten Sie also die Anzahl der Threads auf der Anzahl der Kerne, die Sie haben.

Da Sie gleichzeitig Zugriff auf eine Datei haben, benötigen Sie eine Sperre für diese Datei, die den Prozess ein wenig verlangsamen wird.

Was könnte jedoch verbessern, ist Ihr Code, um die Zeichenfolge zu vergleichen, aber das ist eine andere Frage.

+1

Sie wollen vier Threads * Processing *. Wenn sie jemals in IO hängen bleiben können, dann brauchst du mehr (um die Kerne beschäftigt zu halten). –

+0

@MartinBonner wahr, aber ich glaube, seine Verarbeitung ist viel länger als seine in Datei schreiben – Whitefret

Verwandte Themen