C'est une question assez générale. Je me demande simplement quels trucs et astuces les programmeurs SIG ont utilisés pour accélérer les scripts arcpy que vous importez dans la boîte à outils et exécutez.
La plupart du temps, j'écris de petits scripts pour aider les utilisateurs non SIG de mon bureau à traiter les données SIG. J'ai constaté que le traitement ArcGIS 10.0 en général est plus lent que 9.3.1 et parfois il devient encore plus lent lors de l'exécution d'un script python.
Je vais énumérer un exemple particulier d'un script qui prend plus de 24 heures pour s'exécuter. Il s'agit d'une boucle qui tabule la zone d'un raster dans un tampon pour chaque forme du tampon. Le tampon a environ 7 000 formes. Je ne pense pas que cela devrait durer aussi longtemps. UNE
while x <= layerRecords:
arcpy.SetProgressorLabel("Tabulating Row: " + str(x) + " of " + str(ELClayerRecords))
arcpy.SelectLayerByAttribute_management(Buff,"NEW_SELECTION", "Recno = " + str(x)) # Selecting the record
TabulateArea(Buff, "Recno", MatGRID, "VALUE", ScratchWS + "/tab" + str(z) +".dbf", nMatGRIDc) # Tabulate the area of the single row
arcpy.AddMessage (" - Row: " + str(x) + " completed")
x = x + 1
z = z + 1
Avant que quelqu'un ne le dise, j'ai exécuté une zone de tabulation sur tout le tampon, mais cela produit des erreurs s'il est exécuté sur plus d'un enregistrement. C'est un outil imparfait, mais je dois l'utiliser.
Quoi qu'il en soit, si quelqu'un a des idées sur la façon d'optimiser ou d'accélérer ce script, ce serait très apprécié. Sinon, di vous avez des astuces pour accélérer python, lorsqu'il est utilisé dans ArcGIS?
la source
Les techniques générales d'optimisation de python peuvent vous faire gagner beaucoup de temps.
Une très bonne technique pour savoir où se trouvent les blocages dans votre script consiste à utiliser le module cProfile intégré:
Les tests à l'aide d'un petit échantillon de données vous permettront d'identifier les appels de fonction qui prennent le plus de temps.
Pointeurs généraux pour un code python plus rapide:
En ce qui concerne votre script, je ne peux pas commenter les aspects ArcPy car je n'ai pas Arc installé sur cet ordinateur, mais vous voudrez peut-être essayer d'utiliser une boucle for au lieu d'une boucle while pour voir si cela améliore quelque chose. De même, x = x + 1 peut s'écrire x + = 1:
la source
Assurez-vous que vous écrivez sur le disque interne de l'ordinateur. Atteindre le réseau lorsque cela n'est pas nécessaire peut vraiment ralentir le traitement. Il peut même être plus rapide de copier les données comme première étape du processus pour que les lectures-écritures suivantes soient aussi rapides que possible.
L'exécution du script complètement en dehors d'ArcMap peut être beaucoup plus rapide. Si une carte n'est pas requise pendant le traitement, n'utilisez pas ArcMap.
la source
Calculate Value
boîte de dialogue) sera plus rapide que l'exécution du même script à partir de la fenêtre ArcPy dans ArcMap. C'est une observation purement anecdotique.Cela ne répond peut-être pas à votre question concernant l'exécution des outils ArcPy dans ArcMap, mais lorsque j'ai besoin d'effectuer un traitement charnu avec des outils de géotraitement et Python, j'ai tendance à l'exécuter en dehors du système SIG à l'aide de l'IDE PyScripter . J'ai trouvé qu'il fonctionne plus rapidement. J'ai également utilisé un RAMDISK pour les petits jeux de données de sortie temporaires (un peu comme l' espace de travail in_memory )
Eh bien, ce sont mes meilleurs conseils! :)
la source
Essayez de commenter arcpy.SetProgressorLabel et voyez combien vous accélérez. J'ai trouvé que toute sortie d'écran, en revenant à DOS Daze, ralentit considérablement les temps de traitement. Si vous avez vraiment besoin de voir cette sortie, essayez de l'afficher à chaque Nième boucle.
la source
Assurez-vous de supprimer toutes les
import xxxx
lignes qui ne sont pas utilisées.(c.-à-d. si vous n'utilisez pas encore de fonctions mathématiques, vous en
import Math
aurez pour le chargement du script)Bien que cela n'ait pas un grand impact sur les scripts uniques qui s'exécutent (comme le vôtre), cela affectera tous les scripts qui s'exécutent fréquemment et de manière répétitive.
la source
import Math
était probablement un mauvais exemple. Cependant, certaines des plus grandes bibliothèques ArcPy prennent beaucoup de temps à charger.