2016-09-22 3 views
1

Ich habe eine Liste von Dateien, die mit nur einem Befehl vorverarbeitet werden müssen, bevor sie zusammen mosaikiert werden. Dieser Vorverarbeitungsbefehl verwendet Software von Drittanbietern über Systemaufruf, um auf einen GeoTIFF zu schreiben. Ich wollte Multithreading verwenden, damit die einzelnen Dateien gleichzeitig vorverarbeitet werden können und nach der Verarbeitung aller einzelnen Dateien die Ergebnisse zusammen mosaikiert werden können.Einfachste Möglichkeit, Multithreading/parallele Verarbeitung in Python zu machen

Ich habe noch nie Multi-threading/parallele Verarbeitung verwendet, und nach stundenlanger Suche im Internet habe ich immer noch keine Ahnung, was der beste und einfachste Weg ist.

Im Grunde so etwas wie diese:

files_list = # list of .tif files that need to be mosaicked together but first, need to be individually pre-processed 

for tif_file in files_list: 
    # kick the pre-processing step out to the system, but don't wait for it to finish before moving to preprocess the next tif_file 

# wait for all tiffs in files_list to finish pre-processing 
# then mosaick together 

Wie kann ich das erreichen?

+0

beschränkt? –

+0

Warum sollte diese Aufgabe parallelisiert werden? Diese Dateien hintereinander zu machen, wäre definitiv viel schneller (abgesehen von einigen speziellen Fällen), weil Overhead Python für Multithreading benötigt wird. –

+0

@PeterWood die Ausgabe des Vorverarbeitungsschritts sind geoTIFFs, die ich zusammen mosaikieren muss – user20408

Antwort

0

Siehe die multiprocessing Dokumentation.

from multiprocessing import Pool 

def main(): 
    pool = Pool(processes=8) 
    pool.map(pre_processing_command, files_list) 

    mosaic() 

if __name__ == '__main__': 
    main() 
0

, wenn Sie mehrere Prozessorkerne verwenden müssen, sollten Sie multiprocess, im einfachsten Fall können Sie so etwas wie verwenden:

def process_function(tif_file): 
    ... your processing code here ... 

for tif_file in files_list: 
    p = Process(target=process_function, args=(tif_file)) 
    p.start() 
    p.join() 

Sie müssen dafür Sorge tragen, weil so viele Prozess am Laufen Die gleiche Zeit kann die PC-Ressourcen überbrücken, können Sie here und here für Lösungen für das Problem suchen.

Sie können auch threading.thread, aber es nutzt nur einen Prozessorkern, verwenden und wird von der Was die Ausgabe der Vorverarbeitung ist Global Interpreter Lock

Verwandte Themen