python.exe telah berhenti bekerja


9

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:

  1. Untuk titik tertentu, hitung jarak biaya (menggunakan gp.CostDistance_sa) dengan cutoff waktu tempuh 60 menit.
  2. Memanggil gp.ExtractValuesToPoints_sa untuk mengekstrak semua nilai individual di setiap titik data dan mengeluarkan kelas fitur ke geodatabase file.
  3. 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.


1
ArcGIS 10.0 sekarang menggunakan modul arcpy (ArcGIS 9.x menggunakan modul arcgisscripting). Anda harus mengkonfigurasi ulang kode Anda untuk memanggil arcpy serta menyesuaikan nama-nama alat geoprocessing, jika Anda ingin bekerja di lingkungan AGS 10.
dchaboya

5
Tidak, itu tidak benar - skrip lama yang bekerja di 9.3 akan terus berfungsi di 10 dan 10.1. Anda tidak perlu mengubah gp menjadi arcpy. Anda bahkan dapat memadukan gp dan arcpy di seluruh skrip jika Anda ingin menambahkan fungsionalitas baru, tetapi tidak sepenuhnya dikonversi. ..... mengapa kasus khusus ini menerjang di atas, saya tidak tahu. Saran saya adalah untuk memecahnya menjadi beberapa bagian dan melihat secara tepat alat / fungsi terakhir terjadi sebelum jaminan python
KHibma

KHibma, ya saya menyesal yang masuk akal karena sebagian berfungsi ketika menjalankan dari AGS 10.
dchaboya

Apakah poin data berubah? Saya berasumsi Anda menggunakan fasilitas dalam jarak ke jaringan jalan (waktu perjalanan). Tidak ada jaminan bahwa algoritme untuk memproses titik data mengelola titik yang persis sama setiap kali proses dijalankan. 300 atau 306 atau apa pun yang bisa menjadi kebetulan. Saya telah menggunakan NA untuk analisis biaya jaringan berdasarkan jalan dan lokasi dalam skrip python dan saya ingin tahu apakah Anda sudah mencoba subset yang lebih kecil. Saya akan menjalankan kelompok poin yang jauh lebih kecil di workstation saya selama 60 menit perjalanan di workstation saya. Analisis waktu perjalanan akan menghancurkan daya pemrosesan.
JLP Wisc.

1
Sayangnya kami juga menghadapi masalah stabilitas GP arcpy (yang sebenarnya hanya pembungkus COM, dan seperti yang terlihat seperti kereta). arcpy adalah satu-satunya paket situs yang saya tahu, yang sebenarnya dapat menyebabkan crash pada interpreter python. CLJ menyarankan beberapa solusi di sini di jawaban (gunakan 64 Bit GP, kami kursor GA, dll ...), tapi kami sudah mendapat tanggapan dari ESRI bahwa masalah ini adalah bug. Semoga paket layanan berikutnya membawa perbaikan pada ini
Jürgen Zornig

Jawaban:


1

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.


1

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.

DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\DontShowUI = "1"
DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\Disabled = "1"

0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.