Saya memiliki skrip yang mendapat nilai dari bidang shapefile untuk kembali ke pengguna.
Tampaknya hanya ketika arcpy.SearchCursor disebut ArcMap 10.0 mengunci file dan tidak bisa dihapus setelah skrip selesai berjalan. Untuk membuka kunci, saya harus menutup ArcMap. Dalam skrip saya menghapus objek SearchCursor setelah menggunakannya serta objek baris.
Cara saya membuat skrip bekerja adalah ia mencoba menghapus folder workspace pada menjalankan selanjutnya tetapi tidak bisa karena kunci ... sampai tentu saja saya menutup ArcMap.
Apakah ada saran untuk melepaskan kunci ini?
sumber
row = None
setelah loop cukup membersihkan tugas baris terakhir. Memindahkannya ke dalam loop adalah duplikasi usaha. Dalam hal apa pun, pengumpul sampah harus membatalkan alokasi memori kecuali arcpy atau ArcMap secara internal mempertahankan referensi ke objek baris.Apakah Anda perlu menjalankan skrip ArcPy Anda dari dalam ArcMap? Kecuali jika itu bagian dari antarmuka atau kotak peralatan yang Anda buat, Anda bisa menjalankannya di luar ArcMap dari konsol Python, IDLE, atau Eclipse dll (selama Anda memiliki lisensi yang sesuai pada mesin yang sedang berjalan). Jika demikian, Anda dapat menulis kode Python kecil untuk menelurkan skrip ArcPy Anda sebagai subproses dan kunci harus dilepaskan ketika subproses ditutup.
Kunci ArcGIS menyebalkan. Saya memiliki situasi di mana kunci tetap ada bahkan setelah mematikan mesin, yang merupakan rasa sakit yang monumental (biasanya jika Arc telah crash sebelum dapat merapikan kunci). Sebagai upaya terakhir, jika ini terjadi, gunakan Windows Explorer untuk menemukan file .LOCK dan menghapusnya secara manual. Ini tidak akan berfungsi jika sedang diakses oleh ArcMap atau proses Python, sehingga relatif aman ... tapi ini benar-benar kartu Get-Out-of-Jail dan bukan latihan yang baik :)
sumber
Jika Anda menghapus objek baris dan kursor dengan benar (mis.
del row, rows
) Dan kunci tetap ada, kemungkinan karena ArcMap sendiri, bukan arcpy, masih merujuknya.Apakah shapefile direferensikan oleh lapisan dalam daftar isi, atau ditambahkan ke TOC oleh alat skrip Anda?
Jika yang terakhir, Anda dapat mencoba menonaktifkan "Tambahkan hasil operasi geoprocessing ke layar" di bawah Geoprocessing-> Opsi Geoprocessing di ArcMap.
Saran tambahan: Jika Anda melakukan ini sebagai dataset sementara / menengah, dan jumlah fitur tidak terlalu besar, coba gunakan
in_memory
ruang kerja alih-alih shapefile untuk menyelesaikan masalah penguncian sepenuhnya dan dapatkan potensi peningkatan kinerja yang bagus juga .Pastikan untuk menghapus ruang kerja in_memory atau set data tertentu yang Anda buat di sana menggunakan Delete (Data Management) sebelum keluar dari skrip, jika tidak maka akan terus berada di memori hingga aplikasi ditutup.
Terakhir saya juga akan mencatat bahwa perilaku penguncian shapefile berubah pada 10.0 menjadi lebih ketat dengan tidak menghapus file kunci ketika Anda menghapus lapisan dari daftar isi. Lihat juga artikel ini dan pertanyaan terkait ini .
sumber