44 Ein Debugging ist nicht möglich. Darum ist es wichtig, dass sowohl der Gesamtprozess als auch alle anderen Prozesse sinnvoll und aussagekräftig loggen. Das Logging-Modul in Python bietet dafür gute Unterstützung – die Übergabe einer eindeutigen Prozess- oder Jobnummer (pid) in den Argumenten ist für die spätere Zuordnung einer Log-Datei zu einem Job hilfreich: def worker(arguments): arg_list = eval(arguments) pid = arg_list[0] logging.basicConfig(level=logging.DEBUG, format=‘%(asctime)s %(name)-12s %(levelname)-8s %(message)s‘, datefmt=‘%m-%d %H:%M‘, filename=r‘C:\temp\process_‘+ pid + ‚.log‘, filemode=‘w‘) logging.info(arguments) try: env.overwriteOutput = True ### .... logging.info(„ finished“) except arcpy.ExecuteError: logging.error(„arcpy failed „ + arcpy.GetMessages(2)) except Exception as e: logging.error(„python failed „ + e.args[0]) Folgende Grafiken veranschaulichen zum Schluss noch einmal die mögliche Zeitersparnis durch multiprocessing bei der Ausführung eines Geoverarbeitungsmodells. Die Ausführung eines Testmodells komplett über den gesamten Test- datenbestand direkt in ArcCatalog dauerte 80 Minuten. Durch ein regelmäßiges Gitter wurden die Testdaten in 16 Portionen aufgeteilt und gleichzeitig mit 4 Prozessen (Multiprocessing.Pool-Implementierung) verarbeitet (bei 4 verfügbaren CPUs): Die einzelnen Prozesse (jeder Prozess verarbeitete zwischen 2 und 6 Jobs) dauerten zwischen 31 und 35 Minuten. Der gesamte Prozess (Aufteilen der Daten in Jobs – Verarbeitung der Jobs durch die Prozesse – Zusammenführen aller Ergebnisse) dauerte 38 Minuten – war also immerhin doppelt so schnell wie der eine Prozess für den gesamten Test- datenbestand. Templates für die oben beschriebenen Implementierungen gibt es auf ArcGIS Online zum Download. Suchen Sie mit den Begriffen Python, Thread, Multiprocessing, Template oder verwenden Sie folgenden Link: arcgis.com/home/item.html?id=fbdc5324a3ba4807beb72a97c4bf1a39 Jochen Manegold Esri Deutschland GmbH Kranzberg ++ t ipps u nd t ric k s TIPPS UND TRICKS Für Anwender