Suite

Le script ArcPy s'arrête de s'exécuter de manière aléatoire sans qu'aucune erreur ne soit renvoyée

Le script ArcPy s'arrête de s'exécuter de manière aléatoire sans qu'aucune erreur ne soit renvoyée


Je fais un bassin versant par lots et un processus d'analyse sur 135 points. Ce script a très bien fonctionné la première fois que je l'ai exécuté.

Depuis la première fois, cependant, j'ai vu le script s'arrêter à des moments aléatoires. L'utilisation du processeur reste élevée, la mémoire reste allouée, mais rien ne se passe. Parfois, il passera à travers 100 fonctionnalités, parfois seulement 15. Il n'a jamais de fonction de géotraitement spécifique qui déclenche le processus (d'où tous mes messages d'impression!) A noter également, à moins que je ne termine le processus python.exe via le gestionnaire de tâches, un verrou reste sur la classe d'entités avec laquelle le script travaillait en dernier. Je ne sais pas si c'est utile.

J'ai essayé d'utiliser del et delete_management sur les fichiers temporaires et dans l'espace de travail temporaire, mais le même problème apparaît. J'ai supprimé manuellement tous les fichiers et dossiers après que cela ne fonctionne pas. J'ai même essayé de migrer vers le lecteur C: local plutôt que vers le stockage externe. Rien ne fonctionne. Des idées?

Voici mon code (avec des informations sensibles ##### -ed out). Cela peut sembler un peu redondant au début, mais j'essayais de hacher toutes les erreurs potentielles :

import os from subprocess import Popen import arcpy arcpy.CheckOutExtension("spatial") import arcpy.sa arcpy.env.workspace = "C:Users####DocumentsArcGISWatershedsoutputs " arcpy.env.scratchWorkspace = "C:Users####DocumentsArcGISWatershedsscratch" arcpy.env.overwriteOutput = True arcpy.env.outputCoordinateSystem = arcpy.SpatialReference (102685 ) OutputFolder = "C:Users####DocumentsArcGISWatershedsoutputs" ScratchFolder = "C:Users####DocumentsArcGIS Watershedsscratch" ParcelsFinal = "C:Users####DocumentsArcGISWatershedsinputsParcelsFINAL.shp" Imperv_Merged = "C:Users ####DocumentsArcGISWatershedsinputsImperv_Merged.shp" flowDir = "C:Users####DocumentsArcGISWatershedsinputs dir" pointInput = "C:Users####DocumentsArcGISWatershedsinputspourPoints.shp" c = int(arcpy.GetCount_management(pointInput).getOutput(0)) pointRow = arcpy.SearchCursor(pointInput) fieldList = arcpy.ListFields(pointInput ) essayez : pour la ligne dans pointRow : feat = row.Shape outFeat = OutputFolder + row.Name.replace("-","_") outScratch = ScratchFolder + row.Name.replace("-","_") print "Démarrage de l'analyse du bassin versant pour " + row.Name + "." print "" outWater_r = arcpy.sa.Watershed(flowDir,feat) print "Raster de bassin versant pour " + row.Name + " créé avec succès." Watershed = arcpy.RasterToPolygon_conversion(outWater_r, outFeat + "_watershed.shp", "SIMPLIFY") print "Polygone de bassin versant pour " + row.Name + " créé avec succès." tempParcelClip = arcpy.Clip_analysis(ParcelsFinal, Watershed, outScratch + "tempClip1.shp") print "Temp parcel clip complete" ParcelERA = arcpy.Dissolve_management(tempParcelClip, outFeat + "_parcels.shp", "SWM_ERA", "", "MULTI_PART ", "DISSOLVE_LINES") print "Parcels clip complete" tempImpervClip = arcpy.Clip_analysis(Imperv_Merged, Watershed, outScratch + "tempClip2.shp") print "Temp impervious clip complete" tempIntersect = arcpy.Intersect_analysis([tempImpervClip,ParcelERA], outScratchERA], outScratch + "tempIntersect.shp", "ALL") print "Temp Intersect complete" ImpervERA = arcpy.Dissolve_management(tempIntersect, outFeat + "_impervious.shp", "SWM_ERA", "", "MULTI_PART", "DISSOLVE_LINES") print " Clip imperméable terminé" print "Analyse de l'écrêtage pour " + row.Name + " complete." arcpy.AddField_management(Watershed, "W_ACRES", "DOUBLE", "", "", "") arcpy.CalculateField_management(Watershed, "W_ACRES", "!" + arcpy.Describe(Watershed).shapefieldname + "[email protected] ACRES!", "PYTHON", "") arcpy.AddField_management(ParcelERA, "P_ACRES", "DOUBLE", "", "", "") arcpy.CalculateField_management(ParcelERA, "P_ACRES", "!" + arcpy. Describe(Watershed).shapefieldname + "[email protected]!", "PYTHON", "") arcpy.AddField_management(ImpervERA, "I_ACRES", "DOUBLE", "", "", "") arcpy.CalculateField_management(ImpervERA , "I_ACRES", "!" + arcpy.Describe(Watershed).shapefieldname + "[email protected]!", "PYTHON", "") arcpy.AddField_management(Watershed, "VISTA_NUM", "TEXT", "", "", 10) arcpy.CalculateField_management(Watershed, "VISTA_NUM", '"' + row.Name.replace("-","_") + '"', "PYTHON", "") arcpy.AddField_management(ParcelERA , "VISTA_NUM", "TEXT", "", "", 10) arcpy.CalculateField_management(ParcelERA, "VISTA_NUM", '"' + row.Name.replace("-","_") + '"', "PYTHON", "") arcpy.AddField_management(ImpervE RA, "VISTA_NUM", "TEXTE", "", "", 10) arcpy.CalculateField_management(ImpervERA, "VISTA_NUM", '"' + row.Name.replace("-","_") + '"' , "PYTHON", "") print "Calculs terminés" c -= 1 print "Analyse des bassins versants pour " + row.Name + " complete." print "Il reste " + str(c) + " points." print "" print "" sauf : print arcpy.GetMessages() p = Popen("E:####GIS DataCodeScriptsupper.bat", cwd=r"E:#### GIS DataCodeScripts") stdout, stderr = p.communicate() print "Conversion en majuscules terminée" try: flist = arcpy.ListFeatureClasses() MergeSHP = arcpy.Merge_management(flist, "E:#### ####ModélisationWatershedsMassWatershedsMergeWatersheds.shp") arcpy.AddField_management(MergeSHP, "CALC_ACRES", "DOUBLE", "", "", "") sauf : print arcpy. Obtenir des messages()

Les symptômes que vous décrivez sont pour moi typiques de l'exécution d'un script/outil avec une mémoire RAM insuffisante pour la taille des ensembles de données d'entrée, en conjonction avec tout ce que vous faites sur votre PC/ordinateur portable.

Je recommande:

  • Fermez tout et redémarrez votre machine
  • Exécutez votre script/outil sans rien d'autre en cours d'exécution
  • (si vous le souhaitez, surveillez votre utilisation de la mémoire via le Gestionnaire des tâches, et je soupçonne que cela va augmenter)

Si cela ne se termine toujours pas, répétez la procédure en utilisant un PC/ordinateur portable avec plus de RAM.

J'avais beaucoup de modèles/scripts intensifs en calcul qui fonctionnaient très bien sur tous les ensembles de données d'entrée sauf les plus grands sur une machine avec 4 Go de RAM, mais sur mes ensembles de données les plus volumineux, ils lançaient des blocages et des erreurs aléatoires. Dès que je les ai exécutés sur une machine avec 12 Go de RAM, ils ont bien fonctionné.


Si vous n'avez pas vraiment besoin d'imprimer tous ces messages, considérez que l'impression des messages utilise beaucoup de RAM et je pense que désactiver/réduire le nombre de commandes d'impression vous permettra d'exécuter le script.

Donc, ce que vous devez faire est de commenter toutes les commandes d'impression et de l'exécuter à nouveau.


Voir la vidéo: Python: Map Automation in ArcGIS Pro