Python: das Schreiben auf eine einzige Datei mit dem queue während der Verwendung von multiprocessing Pool
Ich habe Hunderte von tausenden von text-Dateien, die möchte ich analysieren, auf verschiedene Weise. Ich möchte speichern Sie die Ausgabe in eine einzelne Datei ohne Probleme bei der Synchronisierung. Ich habe mit multiprocessing-pool, um dies zu tun, um Zeit zu sparen, aber ich kann nicht herausfinden, wie zu kombinieren, Pool und Warteschlange.
Den folgenden code speichert die infile-name sowie die maximale Anzahl von aufeinander folgenden "x"s in der Datei. Allerdings möchte ich, dass alle Prozesse, Ergebnisse speichern, um die gleiche Datei, und nicht auf verschiedene Dateien, wie in meinem Beispiel. Jede Hilfe auf diesem würde sehr geschätzt werden.
import multiprocessing
with open('infilenamess.txt') as f:
filenames = f.read().splitlines()
def mp_worker(filename):
with open(filename, 'r') as f:
text=f.read()
m=re.findall("x+", text)
count=len(max(m, key=len))
outfile=open(filename+'_results.txt', 'a')
outfile.write(str(filename)+'|'+str(count)+'\n')
outfile.close()
def mp_handler():
p = multiprocessing.Pool(32)
p.map(mp_worker, filenames)
if __name__ == '__main__':
mp_handler()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Multiprocessing-pools implementieren Sie eine Warteschlange für Sie. Nutzen Sie einfach die pool-Methode liefert, dass der Arbeiter Rückgabewert an den Aufrufer. imap funktioniert gut:
imap_unordered
.csv
, ich benutze 42-cores zu verarbeiten und schreiben Sie das Ergebnis auf eine einzelnecsv
- Datei, jedoch gibt es immer ein Durcheinander bei Zeile 147, ich replizieren kann dies über verschiedene sub-Datensätze, aber der gleiche Fehler passiert immer an dieser position.die Reale Produktioncad1d1eaf41c40f89a0198c3be80379f,2018-07-6195d4a2c0914f4381442f08797f658f,2018-06-15 01:47:34,1
, gewünschte Ausgabecad1d1eaf41c40f89a0198c3be80379f,2018-07-30 01:47:34(\n)16195d4a2c0914f4381442f08797f658f,2018-06-15 01:47:34,1
Nahm ich die akzeptierte Antwort und vereinfacht es für mein eigenes Verständnis, wie dies funktioniert. Ich bin Entsendung es hier, falls es jemandem hilft.