Txt-Datei mit Multi-Threaded in Python lesen

Ich versuche, eine Datei in Python zu lesen (scannen Sie es Zeilen und suchen Sie nach Begriffen) und schreiben Sie die Ergebnisse – sagen wir, Zähler für jeden Begriff. Ich muss das für eine große Menge an Dateien machen (mehr als 3000). Ist es möglich, das Multi-Thread zu tun? Wenn ja, wie?

So ist das Szenario so:

  • Lesen Sie jede Datei und scannen Sie ihre Zeilen
  • Schreiben Sie Zähler auf die gleiche Ausgabedatei für alle Dateien, die ich gelesen habe.

Zweite Frage ist, verbessert es die Geschwindigkeit des Lesens / Schreibens.

Hoffe, es ist klar genug. Vielen Dank,

Ron

2 Solutions collect form web for “Txt-Datei mit Multi-Threaded in Python lesen”

Ich stimme mit @aix, multiprocessing ist definitiv der Weg zu gehen. Egal, egal wie du bist – du kannst nur so schnell lesen, egal wie viele parallele Prozesse du hast. Aber es kann leicht etwas beschleunigen.

Betrachten Sie folgendes (input / ist ein Verzeichnis, das mehrere .txt-Dateien von Project Gutenberg enthält).

 import os.path from multiprocessing import Pool import sys import time def process_file(name): ''' Process one file: count number of lines and words ''' linecount=0 wordcount=0 with open(name, 'r') as inp: for line in inp: linecount+=1 wordcount+=len(line.split(' ')) return name, linecount, wordcount def process_files_parallel(arg, dirname, names): ''' Process each file in parallel via Poll.map() ''' pool=Pool() results=pool.map(process_file, [os.path.join(dirname, name) for name in names]) def process_files(arg, dirname, names): ''' Process each file in via map() ''' results=map(process_file, [os.path.join(dirname, name) for name in names]) if __name__ == '__main__': start=time.time() os.path.walk('input/', process_files, None) print "process_files()", time.time()-start start=time.time() os.path.walk('input/', process_files_parallel, None) print "process_files_parallel()", time.time()-start 

Wenn ich das auf meiner Dual-Core-Maschine laufe, gibt es eine spürbare (aber nicht 2x) Beschleunigung:

 $ python process_files.py process_files() 1.71218085289 process_files_parallel() 1.28905105591 

Wenn die Dateien klein genug sind, um in den Speicher passen, und Sie haben viel Verarbeitung zu tun, dass ist nicht ich bin gebunden, dann sollten Sie noch bessere Verbesserung zu sehen.

Ja, es sollte möglich sein, dies parallel zu machen.

Allerdings ist es in Python schwer, Parallelität mit mehreren Threads zu erreichen. Aus diesem Grund ist das multiprocessing die bessere Standardwahl, um Parallele parallel zu machen.

Es ist schwer zu sagen, welche Art von Beschleunigung Sie erwarten können, zu erreichen. Es hängt davon ab, welchen Bruchteil der Arbeitsbelastung es möglich sein wird, parallel zu machen (je mehr desto besser) und welche Fraktion wird seriell durchgeführt werden (je weniger desto besser).

  • Wie bekomme ich die Zeilenzahl in Python?
  • Der effizienteste Weg, um die erste Textzeile aus einem Textdokument zu "knabbern", dann in Python wiederherzustellen
  • Suchen von Textdateien mit verschiedenen Codierungen mit Python?
  • Kombinieren von Spalten von mehreren Dateien in einer Datei - Python
  • Verweigern, einen Teil einer Datei in Python zu lesen
  • Konvertieren Sie tabulatorgetrennte txt-Datei in eine csv-Datei mit Python
  • Importieren von zufälligen Wörtern aus einer Datei ohne Duplikate Python
  • Ist pythonautomatisch parallelisierende IO- und CPU- oder speichergebundene Abschnitte?
  • Kopieren von einer Textdatei in eine andere mit Python
  • Wie passe ich ein Wort in einer Textdatei mit Python?
  • Schreiben Sie mehrere Zeilen zu einer Textdatei, indem Sie Eingabe in Python verwenden?
  • Python ist die beste Programmiersprache der Welt.