[PYTHON] Derjenige, der die CSV-Datei teilt, liest und parallel verarbeitet

Isono ~! Ich habe eine CSV-Datei, die Millionen von Datensätzen enthält. Teilen wir sie also auf und verarbeiten sie parallel!

Bemerkungen

――Ich habe nicht gesehen, dass Sie sich teilen und parallelisieren, also habe ich es als Memorandum geschrieben. Bitte sagen Sie mir, ob es einen schönen Artikel gibt --python3.7

Ich werde es sofort tun

Datei zum Lesen

sample.csv


1,Ah
2,ich
3,U.
4,e
5,Oh

Ich habe "gen_chunks ()" ausgeliehen, weil es eine Person gab, die es https://stackoverflow.com/a/4957046 gemacht hat Jemand hat die meiste Arbeit bereits erledigt. Danke Internet, danke Vorfahren Klicken Sie hier für den vollständigen Code

pool.py


import csv
import time
from multiprocessing import Pool

def read():
    f = open("sample.csv", "r")
    reader = csv.reader(f)

    pool = Pool()
    results = []
    for data_list in gen_chunks(reader):
        results.append(pool.apply_async(do_something, [data_list]))
    pool.close()
    pool.join()
    _ = [r.get() for r in results]

    f.close()

def do_something(data_list):
    print(f"start {data_list}")
    time.sleep(len(data_list))
    # hoge
    print(f"finish {data_list}")

def gen_chunks(reader, chunksize=2):
    """
    Chunk generator. Take a CSV `reader` and yield
    `chunksize` sized slices.
    """
    chunk = []
    for i, line in enumerate(reader):
        if i % chunksize == 0 and i > 0:
            yield chunk
            chunk = []
        chunk.append(line)
    yield chunk

read()

Ergebnis


start [['1', 'Ah'], ['2', 'ich']]
start [['3', 'U.'], ['4', 'e']]
start [['5', 'Oh']]
finish [['5', 'Oh']]
finish [['1', 'Ah'], ['2', 'ich']]
finish [['3', 'U.'], ['4', 'e']]

Da chunksize = 2, werden zwei Datensätze an do_something () übergeben. Wenn es sich um eine große CSV handelt, lassen Sie es sich hier gut anfühlen. Ich erhalte einen Fehler mit _ = [r.get () für r in den Ergebnissen]. Ich sollte den Fehler behandeln, aber ich lasse ihn weg, weil er problematisch ist Es scheint einen besseren Weg zu geben, es zu schreiben, also lass es mich wissen, wenn du es weißt

Wie im Stackoverflow ausgeführt, lautet die Ausgabe wie folgt, wenn der Array-Reset-Teil von "gen_chunks ()" auf "del chunk [:]" gesetzt ist.

Ergebnis


start [['5', 'Oh']]
start [['5', 'Oh']]
start [['5', 'Oh']]
finish [['5', 'Oh']]
finish [['5', 'Oh']]
finish [['5', 'Oh']]

Ich habe die Kommentare nicht richtig gelesen und ein enttäuschendes Ergebnis gesehen Das ist traurig

Recommended Posts

Derjenige, der die CSV-Datei teilt, liest und parallel verarbeitet
Python-Skript, das SQL-Dateien liest, BigQuery ausführt und CSV speichert
Formatieren Sie das Git-Protokoll und erhalten Sie den festgeschriebenen Dateinamen im CSV-Format
Suchen Sie es in der Warteschlange und bearbeiten Sie es
Prognostizieren Sie den Stromverbrauch in 2 Tagen und veröffentlichen Sie ihn in CSV
Behandeln Sie CSV mit dem Element, das Sie im Namen der Datei analysieren möchten
Beachten Sie, dass ich den Algorithmus der kleinsten Quadrate verstehe. Und ich habe es in Python geschrieben.
Diejenige, die den Fortschrittsbalken in Python anzeigt
In Bash "Löschen Sie die Datei, falls vorhanden".
Ich habe in Python ein Tool erstellt, das mit der rechten Maustaste auf eine Excel-Datei klickt und diese für jedes Blatt in Dateien unterteilt.
Extrahieren Sie die Textinformationen in die MP3 / MP4-Datei und speichern Sie sie in der Textdatei (* .lrc) für Sony Walkman.
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Lesen Sie die CSV-Datei mit dem Jupiter-Notizbuch und schreiben Sie die Grafik übereinander
Ein Skript, das die in CSV geschriebenen URLs der Reihe nach öffnet und einen Vollbild-Screenshot erstellt
Speichern Sie das Pystan-Modell und erhalten Sie eine Pickle-Datei
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
Holen Sie sich den MIME-Typ in Python und bestimmen Sie das Dateiformat
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Verschrotten Sie die Liste der Go To EAT-Mitgliedsgeschäfte in der Präfektur Fukuoka und konvertieren Sie sie in CSV
Verschrotten Sie die Liste der Go To EAT-Mitgliedsspeicher in der Präfektur Niigata und konvertieren Sie sie in CSV
CSV-Datei lesen und schreiben
Suchen Sie den Dateinamen einschließlich des angegebenen Wortes und der angegebenen Erweiterung im Verzeichnis
Verschrotten Sie den Zeitplan von Hinatazaka 46 und spiegeln Sie ihn in Google Kalender wider
[Hinweis] Basierend auf dem Breiten- und Längengrad der CSV-Datei haben wir ein Skript erstellt, das Daten im Zielbereich extrahiert und einen Netzcode hinzufügt.