J'ai un script qui obtient une valeur du champ d'un fichier de formes à retourner à l'utilisateur.
Il semble que ce n'est que lorsque l'arcpy.SearchCursor est appelé ArcMap 10.0 verrouille le fichier et qu'il n'est pas supprimé une fois le script terminé. Pour désactiver le verrouillage, je dois fermer ArcMap. Dans le script, je supprime l'objet SearchCursor après l'avoir utilisé ainsi que l'objet ligne.
La façon dont le script fonctionne est qu'il essaie de supprimer le dossier de l'espace de travail lors des exécutions suivantes mais ne peut pas à cause du verrou ... jusqu'à ce que je ferme ArcMap.
Y a-t-il des conseils pour faire disparaître cette serrure?
la source
row = None
après la boucle nettoie simplement la dernière affectation de ligne. Le déplacer dans la boucle est une duplication d'efforts. Dans tous les cas, le garbage collector doit désallouer la mémoire, sauf si arcpy ou ArcMap ne conserve pas de manière interne une référence aux objets de ligne.Avez-vous besoin d'exécuter votre script ArcPy depuis ArcMap? À moins qu'il ne fasse partie d'une interface ou d'une boîte à outils que vous avez créée, vous pouvez l'exécuter en dehors d'ArcMap à partir d'une console Python, IDLE ou Eclipse, etc. (tant que vous disposez d'une licence appropriée sur la machine sur laquelle il fonctionne). Si tel est le cas, vous pouvez écrire un petit code Python pour générer votre script ArcPy en tant que sous-processus et le verrou doit être libéré à la fermeture du sous-processus.
Les verrous ArcGIS sont pénibles. J'ai eu des situations où une serrure persiste même après l'arrêt de la machine, ce qui est une douleur monumentale (généralement si Arc s'est écrasé avant de pouvoir ranger les serrures). En dernier recours, si cela se produit, utilisez l'Explorateur Windows pour rechercher le fichier .LOCK et supprimez-le manuellement. Cela ne fonctionnera pas si ArcMap ou un processus Python y accède, donc c'est relativement sûr ... mais c'est vraiment une carte de sortie de prison et ce n'est pas une bonne pratique :)
la source
Si vous supprimez correctement les objets ligne et curseur (par exemple
del row, rows
) et que le verrou reste, c'est probablement parce qu'ArcMap lui-même, et non arcpy, le fait toujours référence.Le fichier de formes est-il référencé par une couche dans la table des matières, ou est-il ajouté à la table des matières par votre outil de script?
Dans ce dernier cas, vous pouvez essayer de désactiver "Ajouter les résultats des opérations de géotraitement à l'affichage" sous Géotraitement-> Options de géotraitement dans ArcMap.
Une suggestion supplémentaire: si vous faites cela en tant que jeu de données temporaire / intermédiaire et que le nombre d'entités n'est pas trop important, essayez d'utiliser l'
in_memory
espace de travail au lieu d'un fichier de formes pour contourner entièrement le problème de verrouillage et obtenir également une augmentation potentielle des performances. .Assurez-vous simplement de supprimer l'espace de travail in_memory ou les ensembles de données spécifiques que vous y créez à l'aide de Delete (Data Management) avant de quitter le script, sinon il continuera à résider en mémoire jusqu'à la fermeture de l'application.
Enfin, je voudrais également noter que le comportement de verrouillage des fichiers de formes a changé dans 10.0 pour devenir plus strict en ne supprimant pas les fichiers de verrouillage lorsque vous supprimez un calque de la table des matières. Voir également cet article et cette question connexe .
la source