Sebuah skrip python ditulis sekitar 18 bulan yang lalu oleh seseorang yang kini telah pergi. Itu menghasilkan output yang dibutuhkan kemudian. Saya telah diminta untuk menjalankannya lagi tetapi dengan input data yang berbeda (resolusi lebih baik). Dataset input telah dibagi menjadi 20 sub-set masing-masing sekitar 2,700 poin data. Namun, skrip mogok ("python.exe telah berhenti bekerja") setelah sekitar 300 titik data telah diproses (kisaran 295 hingga 306 dan TIDAK selalu gagal pada catatan yang sama).
Seperti yang lama (ish), skrip ditulis menggunakan arcgisscripting dan bukan arcpy. Secara umum ini melakukan hal berikut menggunakan kursor:
- Untuk titik tertentu, hitung jarak biaya (menggunakan gp.CostDistance_sa) dengan cutoff waktu tempuh 60 menit.
- Memanggil gp.ExtractValuesToPoints_sa untuk mengekstrak semua nilai individual di setiap titik data dan mengeluarkan kelas fitur ke geodatabase file.
- Membaca kelas fitur yang dibuat pada b) di atas dan menulis nilai-nilai ke file CSV (menghilangkan titik dengan "No Data" (value -9999)).
Ulangi 1, 2 dan 3 untuk semua titik data yang tersisa di file input.
Waktu pemrosesan kira-kira. Rata-rata 1 menit per titik data. Berikut adalah beberapa spesifikasi teknis yang relevan:
- PC memiliki CPU quad core Intel i7-2720QM yang berjalan pada 2.20GHz dengan RAM 8GB yang menjalankan Windows 7 (64 bit).
- Versi Python adalah 2.6.6 (shell juga menyatakan "[MSC v, 1500 32 bit (Intel)] pada win32).
- ArcMap 10.0 (SP4) juga diinstal.
Saya sudah mencoba menjalankannya pada PC yang berbeda (sejauh ini tanpa crash). Saat ini pekerjaan berjalan dengan sukses (tetapi lebih lambat) pada PC yang lebih lama dan telah mencapai 419 catatan tanpa crash. Spesifikasi yang relevan untuk mesin ini adalah:
- Prosesor Intel Core 2 DUO E7500 berjalan pada 2.93GHz dengan 4 GB RAM dan 64bit Windows 7.
- Python versi 2.5.1 (shell juga menyatakan "[MSC v, 1310 32 bit (Intel)] di win32).
- ArcMap 9.3 diinstal (tidak disebutkan Paket Layanan).
Dapatkah seseorang menawarkan saran tentang mengapa skrip tampaknya berfungsi untuk sementara waktu lalu macet dan bagaimana menyelesaikannya?
Fakta bahwa PC yang berbeda muncul (sejauh ini) untuk menangani skrip menyarankan sesuatu "lingkungan".
Sebagai pembaruan, PC yang menjalankan ARCGIS 9.3 masih berhasil memproses data dan telah mencapai 1.300 titik data yang diproses (dan masih terus bertambah). Seorang kolega juga menjalankan data pada PC mereka yang menjalankan ARCGIS 10.1 - itu macet setelah 267 catatan pada dua kesempatan terpisah. Meskipun tidak konklusif, utas umum tampaknya adalah Arc 9.3 akan memproses data tetapi Arc 10.x tidak akan.
sumber
Jawaban:
Jika Anda menjalankan task manager dan menyaksikan peningkatan python yang dapat dieksekusi dalam memori dan melebihi 1 gb sebelum mati, maka Anda mungkin mendapat manfaat dari peningkatan ke 10.1 64 bit geoprocessing.
Untuk kinerja, jika Anda menggunakan kursor, Anda mungkin mendapat manfaat dari kursor arcpy.da yang baru. http://resources.arcgis.com/en/help/main/10.1/index.html#//018w0000000800000000
Saya memutakhirkan proyek untuk menggunakan arcpy.da dan itu adalah peningkatan 2 magnitudo.
sumber
Ini hanyalah bug yang buruk. Anda dapat mencoba menghindari menggunakan langkah-langkah yang menyebabkan kerusakan, tetapi umumnya terjadi di bawah alat yang berbeda ketika digunakan untuk memproses melalui daftar data yang panjang. Satu-satunya solusi yang saya temukan adalah membuat skrip saya menyimpan progresnya sepanjang jalan ke disk, jadi jika Anda memulai kembali prosesnya, ia tahu dari mana harus mengambil. Jika Anda kemudian menonaktifkan pesan windows debugger dengan mengubah registri (lihat di bawah), Anda kemudian dapat berulang kali menjalankan skrip di cmd.exe hingga menyelesaikan seluruh kumpulan tanpa harus menutup proses secara manual setiap kali di antaranya.
Saya tahu ini adalah solusi yang mengerikan, tetapi sangat jarang memiliki perpustakaan python membunuh penerjemah python.
sumber
Sudahkah Anda memeriksa bagaimana skrip menangani kursor? Aplikasi saya sering hang ketika saya lupa menutupnya menggunakan eksplisit
del row, cursor
, kadang-kadang hanya setelah beberapa waktu.Jika itu tidak membantu, saya sarankan menggunakan sebagian kecil kode dan / atau data.
sumber