Adakah yang mempelajari perbedaan dalam menjalankan skrip Python di ArcToolbox dibandingkan sebagai skrip yang berdiri sendiri? Saya harus menulis skrip cepat-dan-kotor untuk mengubah satu set gambar RGB menjadi satu band dengan mengekstraksi band 1. Sebagai skrip yang berdiri sendiri membaca dan menulis ke PC saya itu memproses 1000 gambar berukuran identik dalam waktu sekitar 350 detik. Menjalankan skrip yang sama dari ArcToolbox membutuhkan waktu sekitar 1250 detik.
import arcpy
import csv
from os import path
arcpy.env.workspace = in_folder
image_list = arcpy.ListRasters()
#Create a CSV file for timing output
with open(outfile, 'wb') as c:
cw = csv.writer(c)
cw.writerow(['tile_name', 'finish_time'])
#Start the timer at 0
start_time = time.clock()
for image in image_list:
#Extract band 1 to create a new single-band raster
arcpy.CopyRaster_management(path.join(image, 'Band_1'), path.join(out_folder, image))
cw.writerow([image, time.clock()])
Saya menambahkan beberapa kode untuk dilacak ketika setiap ubin selesai diproses, dan mengekspor hasilnya sebagai CSV. Mengonversi waktu selesai ke waktu pemrosesan terjadi di Excel. Grafik hasil, waktu pemrosesan kira-kira sama untuk setiap ubin sebagai skrip, tetapi waktu pemrosesan meningkat secara linear ketika dijalankan sebagai Alat ArcGIS.
Jika data membaca dan menulis adalah ke perangkat jaringan, kenaikan tampaknya eksponensial.
Saya tidak mencari cara alternatif untuk menyelesaikan tugas khusus ini. Saya ingin memahami mengapa kinerja skrip ini menurun seiring waktu ketika dijalankan sebagai alat ArcGIS , tetapi bukan sebagai skrip yang berdiri sendiri. Saya perhatikan perilaku ini dengan skrip lain juga.
Jawaban:
Ini adalah pendapat saya: menjalankan skrip dari ArcToolbox menimbulkan semua biaya tersembunyi saat alat mencoba berinteraksi / memperbarui aplikasi utama (ArcMap). Semua alat akan memperbarui metadata, beberapa mencoba untuk menyegarkan kembali jendela peta dan MXD merekam setiap alat yang Anda jalankan di panel sejarah geoproses. Tak satu pun dari dampak tersembunyi ini terjadi saat berjalan dalam IDE.
Jadi menjalankan loop hanya 1000 kali berarti MXD menyimpan 1000 log. Karena ArcMap adalah perangkat lunak berpemilik tertutup, kami tidak tahu bagaimana mekanisme pencatatan log pemrosesan benar-benar terjadi dan mungkin langkah pembatas laju adalah struktur data yang mereka gunakan tidak mampu menangani pengulangan besar?
Masalah lain adalah bahwa ArcMap adalah aplikasi yang digerakkan oleh peristiwa, hal-hal terjadi ketika peristiwa terjadi, Anda menggeser peta dan menyegarkan peta, Anda menambahkan data dan tombol diaktifkan. Saya kira itu mungkin bahwa alat menembak semua jenis acara dan aplikasi menjadi "kewalahan" oleh mereka ketika alat digunakan dengan cara yang berulang-ulang, tapi itu saya berspekulasi?
Saya pikir kita harus meningkatkan pro dan kontra, mengekspos skrip sebagai alat skrip membuatnya mudah digunakan di lingkungan ArcMap, terutama untuk pengguna non-listrik. Itu masalah penting jika Anda ingin kode Anda diadopsi. Nomor hardcore berderak hanya oleh Anda tanpa perlu melakukan kontrol kualitas menengah kemudian jalankan script di IDE pilihan Anda.
sumber