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 gebe ich den Unterschied in Zahlen beim Lesen und Schreiben in Textdateien in Python?
  • Importieren von zufälligen Wörtern aus einer Datei ohne Duplikate Python
  • Öffnen von Textdateien aus einer Liste in einer anderen Textdatei mit python
  • So lesen und organisieren Sie Textdateien geteilt durch Schlüsselwörter
  • Bestimmen Sie die Verschlüsselung von Text in Python
  • Wie springe ich zu einer bestimmten Zeile in einer riesigen Textdatei?
  • Verweigern, einen Teil einer Datei in Python zu lesen
  • Wie STDIN und STDOUT mit PHP und Python zu html2text verwenden und erhalten Sie einen Abschlag formatierten Text?
  • Ist pythonautomatisch parallelisierende IO- und CPU- oder speichergebundene Abschnitte?
  • Python: Laden von Wörtern aus Datei in einen Satz
  • Wie spalte ich eine riesige Textdatei in Python
  • Python ist die beste Programmiersprache der Welt.