2017-06-14 4 views
0

Ich habe drei Funktionen, die jeweils lesen, verarbeiten und schreiben. Jede Funktion wurde optimiert (nach meinem besten Wissen), um unabhängig zu arbeiten. Jetzt versuche ich, jedes Ergebnis jeder Funktion als nächstes in der Kette zu übergeben, sobald es verfügbar ist, anstatt auf die gesamte Liste zu warten. Ich bin mir nicht sicher, wie ich sie verbinden kann. Hier ist, was ich bisher habe.Abrufen und Verwenden von Teilresultaten von Pool

def main(files_to_load): 
    loaded_files = load(files_to_load) 
    with ThreadPool(processes=cpu_count()) as pool: 
     proccessed_files = pool.map_async(processing_function_with_Pool, iterable=loaded_files).get() 
    write(proccessed_files) 

Wie Sie sehen können, meine Funktion main() wartet auf alle Dateien (ca. 500 MB) zu laden speichert sie in den Speicher und sendet sie an processing_function_with_Pool(), die die Dateien in Stücke teilt processed.After zu sein Wenn die Verarbeitung abgeschlossen ist, werden die Dateien auf die Festplatte geschrieben. Ich habe das Gefühl, dass zwischen diesen drei Schritten viel unnötiges Warten stattfindet. Wie kann ich alles verbinden?

Antwort

0

Jetzt liest Ihre Logik alle Dateien der Reihe nach (ich denke) und speichert sie sofort im Speicher.

Ich würde Ihnen empfehlen, an processing_function_with_Pool nur eine Liste mit den zu verarbeitenden Dateinamen zu senden.

Die processing_function_with_Pool wird sich um das Lesen, die Verarbeitung der Datei und das Schreiben der Ergebnisse kümmern.

Auf diese Weise profitieren Sie vom gleichzeitigen Umgang mit IO.

Wenn die processing_function_with_Pool arbeitet CPU-gebunden, würde ich vorschlagen, Sie zu einem Pool von Prozessen wechseln.

Verwandte Themen