У меня есть скрипт, который получает значение из поля шейп-файла для возврата пользователю.
Кажется, что только когда arcpy.SearchCursor вызывается, ArcMap 10.0 блокирует файл и не удаляется после завершения работы скрипта. Чтобы снять блокировку, я должен закрыть ArcMap. В скрипте я удаляю объект SearchCursor после его использования, а также объект строки.
Сценарий работает так, что он пытается удалить папку рабочей области при последующих запусках, но не может из-за блокировки ... пока, конечно, я не закрою ArcMap.
Есть ли какой-нибудь совет, как убрать этот замок?
источник
row = None
после того, как цикл просто очищает назначение последней строки. Перемещение его внутри цикла - это дублирование усилий. В любом случае сборщик мусора должен освободить память, если только Arcpy или ArcMap не поддерживают внутреннюю ссылку на объекты строки.Вам нужно запустить скрипт ArcPy из ArcMap? Если он не является частью интерфейса или набора инструментов, который вы создали, вы можете запускать его вне ArcMap из консоли Python, IDLE или Eclipse и т. Д. (При условии, что у вас есть соответствующая лицензия на компьютере, на котором он работает). Если это так, вы можете написать небольшой код Python для порождения вашего скрипта ArcPy в качестве подпроцесса, и блокировка должна быть снята при закрытии подпроцесса.
Замки ArcGIS - это боль. У меня были ситуации, когда блокировка сохраняется даже после выключения машины, что является монументальной болью (обычно, если Arc разбился до того, как смог привести в порядок замки). В крайнем случае, если это произойдет, используйте проводник Windows, чтобы найти файл .LOCK и удалить его вручную. Это не будет работать, если к нему обращается ArcMap или процесс Python, так что это относительно безопасно ... но это действительно карта Get-Out-of-Jail и не очень хорошая практика :)
источник
Если вы правильно удаляете как объекты строки, так и объекты курсора (например
del row, rows
), и блокировка остается, скорее всего, потому что сам ArcMap, а не arcpy, все еще ссылается на него.На шейп-файл ссылается слой в оглавлении или он добавлен в оглавление вашим скриптовым инструментом?
Если последнее, вы можете попробовать отключить «Добавить результаты операций геообработки на экран» в разделе « Геообработка-> Параметры геообработки в ArcMap».
Дополнительное предложение: если вы делаете это как временный / промежуточный набор данных, и число объектов не слишком велико, попробуйте использовать
in_memory
рабочее пространство вместо шейп-файла, чтобы полностью обойти проблему блокировки и получить хороший потенциальный прирост производительности. ,Обязательно удалите рабочую область in_memory или определенные наборы данных, которые вы создаете там, используя Delete (Data Management) перед выходом из сценария, в противном случае она будет оставаться в памяти до тех пор, пока приложение не закроется.
Наконец, я также хотел бы отметить, что поведение блокировки шейп-файла изменилось в 10.0, чтобы стать более строгим, не удаляя файлы блокировки при удалении слоя из оглавления. Смотрите также эту статью и этот связанный вопрос .
источник