Ich interessiere mich für Lernmethoden, um das volle Ausmaß der auf einem Desktop-Computer verfügbaren Multicore-Verarbeitungsleistung zu nutzen. Arc gibt an, dass die Hintergrund-Geoverarbeitung es dem Benutzer ermöglicht, mehrere Kerne zu verwenden. Tasks müssen jedoch im Wesentlichen in der Warteschlange warten, bis die vorherige Task abgeschlossen ist.
Hat jemand parallele oder Multithread-Geoverarbeitungsverfahren in Arc / Python entwickelt? Gibt es Hardware-Engpässe, die die Multicore-Verarbeitung bei einzelnen Aufgaben verhindern?
In Stackoverflow habe ich ein interessantes Beispiel gefunden, das mein Interesse geweckt hat, obwohl es kein Geoverarbeitungsbeispiel ist:
from multiprocessing import Pool
import numpy
numToFactor = 976
def isFactor(x):
result = None
div = (numToFactor / x)
if div*x == numToFactor:
result = (x,div)
return result
if __name__ == '__main__':
pool = Pool(processes=4)
possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
print 'Checking ', possibleFactors
result = pool.map(isFactor, possibleFactors)
cleaned = [x for x in result if not x is None]
print 'Factors are', cleaned
this is not meant to discourage
.Antworten:
Hier ist ein Beispiel für ein Multicore-Arcpy-Skript. Der Prozess ist sehr rechenintensiv und lässt sich daher sehr gut skalieren : Portieren von Avenue-Code zum Erstellen von Schatten in ArcPy / Python für ArcGIS Desktop?
Einige allgemeinere Informationen in dieser Antwort: Können gleichzeitig ablaufende Prozesse in einem einzigen Modell ausgeführt werden?
quelle
Meiner Erfahrung nach ist das größte Problem das Stabilitätsmanagement. Wenn Sie sechs Wochen lang in einer einzigen Nacht arbeiten, treten auch sechs Wochen lang unerklärliche Fehler und Bugs auf.
Ein alternativer Ansatz besteht darin, eigenständige Skripts zu entwickeln, die unabhängig ausgeführt werden können und ohne Probleme fehlschlagen:
quelle