Je suis intéressé à apprendre des méthodes pour utiliser toute la puissance de traitement multicœur disponible sur un ordinateur de bureau. Arc indique que le géotraitement en arrière-plan permet à l'utilisateur d'utiliser plusieurs cœurs, cependant, les tâches doivent essentiellement attendre en ligne pour que la tâche précédente soit terminée.
Quelqu'un a-t-il développé des méthodes de géotraitement parallèles ou multithread en Arc / Python? Existe-t-il des goulots d'étranglement matériels qui empêchent le traitement multicœur sur des tâches individuelles?
J'ai trouvé un exemple intéressant dans Stackoverflow qui a attiré mon attention, bien qu'il ne s'agisse pas d'un exemple de géotraitement:
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
.Réponses:
Voici un exemple de script arcpy multicœur. Le processus est très gourmand en CPU donc il évolue très bien: Portage du code Avenue pour produire des ombres de construction vers ArcPy / Python pour ArcGIS Desktop?
Quelques informations plus générales dans cette réponse: les processus simultanés peuvent-ils être exécutés dans un seul modèle?
la source
D'après mon expérience, le plus gros problème est la gestion de la stabilité. Si vous effectuez six semaines de traitement en une seule nuit, vous aurez également six semaines d'erreurs et de bugs inexplicables.
Une autre approche consiste à développer des scripts autonomes qui peuvent s'exécuter indépendamment et échouer sans causer de problèmes:
la source