Kinerja Script Python sebagai Alat ArcGIS Versus Stand-Alone

11

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.

masukkan deskripsi gambar di sini

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.

Bjorn
sumber
1
python di luar ArcGIS jauh lebih cepat. Saya hanya menggunakan jendela python ketika melakukan skrip yang sangat sederhana, atau ingin kemampuan untuk menarik dan melepas item ke terminal. Dugaan saya adalah terminal ArcGIS mengontrol alokasi sumber daya juru bahasa karena seluruh paket perangkat lunak juga membutuhkan python untuk beroperasi.
atxgis
rekomendasi saya (berdasarkan pengalaman saya, bukan data kinerja terukur seperti yang Anda berikan) adalah hanya menggunakan arcpy sebagai pilihan terakhir. Pada contoh di atas, setiap interpreter python tanpa arcpy cukup mampu menyaring direktori untuk raster secara efisien dan menyalinnya ke folder baru
Paul H
1
Berapa banyak perbedaan antara geoprosesing x64 latar belakang dan dalam proses 32 bit?
Kirk Kuykendall
Ketika Anda mengatakan bahwa Anda "menjalankan skrip Python di ArcToolbox", maksud Anda bahwa Anda menjalankan alat Skrip Python? Jika demikian, apakah Anda menjalankannya tanpa parameter untuk pengujian Anda?
PolyGeo
@ PolyGeo ya, saya membuat alat skrip di kotak alat ArcGIS. Butuh 1 parameter, dari mana in_folder dan out_folder diturunkan. Itu semua dilakukan sebelum pengukuran waktu dimulai.
Bjorn

Jawaban:

1

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.

Hornbydd
sumber