Performances des scripts Python en tant qu'outil ArcGIS versus autonome

11

Quelqu'un a-t-il étudié la différence dans l'exécution d'un script Python dans ArcToolbox par rapport à un script autonome? J'ai dû écrire un script rapide et sale pour convertir un ensemble d'images RVB en bande unique en extrayant la bande 1. En tant que script autonome lisant et écrivant sur mon PC, il traite 1000 images de taille identique en environ 350 secondes. L'exécution du même script à partir d'ArcToolbox prend environ 1250 secondes.

import arcpy
import csv
from os import path

arcpy.env.workspace = in_folder
image_list = arcpy.ListRasters()

#Create a CSV file for timing output
    with open(outfile, 'wb') as c:
        cw = csv.writer(c)
        cw.writerow(['tile_name', 'finish_time'])

        #Start the timer at 0
        start_time = time.clock()

        for image in image_list:
            #Extract band 1 to create a new single-band raster
            arcpy.CopyRaster_management(path.join(image, 'Band_1'), path.join(out_folder, image))
            cw.writerow([image, time.clock()])

J'ai ajouté du code pour suivre la fin du traitement de chaque mosaïque et exporter les résultats au format CSV. La conversion de l'heure de fin en temps de traitement se produit dans Excel. Représentant graphiquement les résultats, le temps de traitement est à peu près le même pour chaque mosaïque qu'un script, mais le temps de traitement augmente linéairement lorsqu'il est exécuté en tant qu'outil ArcGIS.

entrez la description de l'image ici

Si les données sont lues et écrites sur un périphérique réseau, l'augmentation semble exponentielle.

Je ne cherche pas d'autres moyens d'accomplir cette tâche particulière. Je veux comprendre pourquoi les performances de ce script se dégradent au fil du temps lorsqu'il est exécuté en tant qu'outil ArcGIS , mais pas en tant que script autonome. J'ai également remarqué ce comportement avec d'autres scripts.

Bjorn
la source
1
python en dehors d'ArcGIS est beaucoup plus rapide. J'utilise la fenêtre python uniquement lorsque je fais des scripts très simples, ou je veux pouvoir glisser-déposer des éléments dans le terminal.Je suppose que le terminal ArcGIS contrôle l'allocation des ressources de l'interpréteur car l'ensemble du logiciel a également besoin de python pour fonctionner.
atxgis
ma recommandation (sur la base de mon expérience, et non de données de performances quantifiées comme vous l'avez fournies) est de n'utiliser arcpy qu'en dernier recours. Dans l'exemple ci-dessus, tout interpréteur python sans arcpy est tout à fait capable de filtrer efficacement un répertoire pour les rasters et de les copier dans un nouveau dossier
Paul H
1
Quelle différence entre le géotraitement en arrière-plan x64 et 32 ​​bits en cours de traitement?
Kirk Kuykendall
Lorsque vous dites que vous "exécutez un script Python dans ArcToolbox", voulez-vous dire que vous exécutez un outil de script Python? Si oui, l'exécutez-vous sans paramètres pour votre test?
PolyGeo
@PolyGeo oui, j'ai créé un outil de script dans une boîte à outils ArcGIS. Il a fallu 1 paramètre, dont dérivent in_folder et out_folder. Tout cela est fait avant le début des mesures de synchronisation.
Bjorn

Réponses:

1

Voici ma vision des choses: l'exécution d'un script à partir d'ArcToolbox entraîne toutes sortes de coûts cachés car les outils tentent d'interagir / de mettre à jour l'application principale (ArcMap). Tous les outils mettront à jour les métadonnées, certains essaient de rafraîchir la fenêtre de carte et le MXD enregistre chaque outil que vous exécutez dans le panneau d'historique de géotraitement. Aucun de ces impacts cachés ne se produit lors de l'exécution dans un IDE.

Donc, exécuter une boucle à peine 1000 fois signifie que le MXD stocke 1000 journaux. Comme ArcMap est un logiciel propriétaire fermé, nous n'avons aucune idée de la façon dont la mécanique de l'enregistrement des journaux de traitement se déroule réellement et peut-être que l'étape de limitation de débit est la structure de données qu'ils ont utilisée n'est pas capable de gérer de grandes répétitions?

Un autre problème serait qu'ArcMap est une application pilotée par les événements, les choses se produisent lorsque des événements se produisent, vous effectuez un panoramique sur la carte et la carte s'actualise, vous ajoutez des données et un bouton permet. Je suppose qu'il est possible que les outils déclenchent toutes sortes d'événements et que l'application en soit "submergée" lorsque les outils sont utilisés de manière répétitive, mais c'est moi qui spécule?

Je pense qu'il faut monter les avantages et les inconvénients, exposer un script comme un outil de script le rend facile à utiliser dans l'environnement ArcMap, en particulier pour les utilisateurs non avertis. C'est un problème important si vous voulez que votre code soit adopté. Un nombre inconditionnel crunch juste par vous sans avoir besoin de faire un contrôle de qualité intermédiaire, puis exécutez le script dans votre IDE préféré.

Hornbydd
la source