Hasil yang tidak biasa untuk tes kecepatan geoproses

9

Saya telah mengamati kinerja yang tidak biasa dengan skrip geoproses Python. Skrip (terlampir) melakukan tindakan berikut:

  1. Gunakan kursor pencarian untuk mencari zona UTM yang sesuai dengan fitur poligon
  2. Buat objek referensi spasial berdasarkan hasil kursor pencarian
  3. Konversikan .csv ke lapisan fitur dan kemudian ke kelas fitur titik

Saya perhatikan waktu pemrosesan yang sangat berbeda berdasarkan pada bagaimana skrip dijalankan:

  • Pemrosesan 32-bit menggunakan IDLE = 203 detik
  • Alat skrip foreground pemrosesan 32-bit = 91 detik
  • Alat skrip latar belakang pemrosesan 64-bit = 206 detik

Mengapa skrip ini tampil sangat berbeda mengingat kondisi di atas? Saya tentu tidak akan mengharapkan alat skrip 32-bit berjalan di latar depan menjadi 2X secepat metode lainnya.


import arcpy, os, time

###IDLE Parameters
##fc = r'C:\path\to\polygon\fc\with\utm\zones\and\features'
##outws = r'C:\out\location'
##arcpy.env.workspace = r'C:\workspace'

####################
## Script tool parameters
fc = arcpy.GetParameterAsText(0)    # Feature class
outws = arcpy.GetParameterAsText(1) # Folder
arcpy.env.workspace = arcpy.GetParameterAsText(2)   # Workspace
####################

# Tables are .csv
tables = arcpy.ListTables()

start = time.clock()

# Look up which UTM zone .csv features are in
for t in tables:
    quad = t[7:17]
    print quad
    whereClause = """ "QUADID" LIKE '%s' """ % quad
    with arcpy.da.SearchCursor(fc, ("QUADID","ZONE"), whereClause) as cursor:
        for row in cursor:
            if row[0] == quad:
                utmZone = row[1]
                if utmZone == 10:
                    sr = arcpy.SpatialReference(26910)  # NAD_1983_UTM_Zone_10N
                elif utmZone == 11:
                    sr = arcpy.SpatialReference(26911)  # NAD_1983_UTM_Zone_11N
                elif utmZone == 12:
                    sr = arcpy.SpatialReference(26912)  # NAD_1983_UTM_Zone_12N
                elif utmZone == 13:
                    sr = arcpy.SpatialReference(26913)   # NAD_1983_UTM_Zone_13N
                else:
                    print "The UTM Zone is outside 10-13"
            else:
                pass

    # Convert .csv to feature class
    try:
        outLayer = "in_memory"
        # Now with the sr defined, create the XY Event Layer
        arcpy.MakeXYEventLayer_management(t, "x", "y", outLayer, sr, "z")
        arcpy.FeatureClassToFeatureClass_conversion(outLayer, outws, t[7:17])
        arcpy.Delete_management("in_memory")
        end = time.clock()
        print "In_memory method finished in %s seconds" % (end - start)

    except:
        # Print any error messages
        print arcpy.GetMessages(2)

print "Processing complete"
Harun
sumber
1
Berapa lama waktu yang dibutuhkan untuk mengimpor arcpy sendiri? Apakah ada kesalahan formating pada postingan? Haruskah coba: berada di dalam for loop?
Nathan W
2
Saya pikir poin @ NathanW tentang import arcpypatut dipertimbangkan terlebih dahulu karena sepertinya waktu hanya diperlukan oleh rute IDLE dan 64bit dari tiga tes Anda, tetapi menambahkan hampir dua menit tampaknya berlebihan. Coba jalankan alat yang tidak lebih dari waktu impor ArcPy.
PolyGeo
3
Saya akan cukup aman untuk mengatakan bahwa itu adalah import arcpygaris. Terakhir kali saya menggunakan arcpy lambat untuk mengimpor dari luar. ArcGIS akan memiliki yang sudah diimpor di Python internal sehingga impor sudah di-cache.
Nathan W
3
@Nathan dan yang lainnya benar-benar benar. Menjalankan proses melalui IDLE atau baris perintah terpukul ketika Anda memanggil 'import arcpy'. Namun, Anda bisa mendapatkan pertukaran untuk proses yang sangat besar di mana Anda mendapatkan waktu 'kembali' melalui peningkatan kinerja. Menjalankan proses latar belakang juga memiliki banyak waktu karena ArcGIS efektif memulai sesi ArcMap lainnya. Terakhir, Anda juga memiliki variabel lain yang perlu Anda hilangkan dalam percobaan Anda seperti apa perbedaan dalam perangkat keras antara mesin 32 dan 64 bit Anda dan proses apa yang menghabiskan sumber daya selama percobaan Anda, dll?
MappaGnosis
2
+1 @JayLaura. Bisa melangkah lebih jauh dan profil. [ General python doc] [ docs.python.org/2/library/profile.html] dan [ stackexchange posting] [ stackoverflow.com/questions/582336/… .
Roland

Jawaban:

6

Saya punya teori.

Saya pikir masalahnya mungkin validasi dari output atau input Anda. Sebelum alat GP berjalan, arcpy memvalidasi parameter, misalnya, apakah kelas fitur output sudah ada.

Di dalam ArcMap, konten workspace (folder) semuanya di-cache dan validasi dapat dilakukan terhadap "tampilan" katalog workspace - dalam memori - dengan cepat. Ini dapat menyebabkan kebingungan jika dataset ditambahkan menggunakan alat non-ArcGIS, membutuhkan arcpy.RefreshCatalog () harus dijalankan untuk menyinkronkan tampilan katalog dengan keadaan ruang kerja (folder).

Jika folder Anda sangat besar, dan Anda menjalankan di luar ArcGIS, arcpy mungkin harus membuat daftar folder setiap kali untuk memvalidasi output FeatureClassToFeatureClass Anda. Jika ada banyak item di folder, ini bisa sangat lambat.

Harga Curtis
sumber