Saya telah mengamati kinerja yang tidak biasa dengan skrip geoproses Python. Skrip (terlampir) melakukan tindakan berikut:
- Gunakan kursor pencarian untuk mencari zona UTM yang sesuai dengan fitur poligon
- Buat objek referensi spasial berdasarkan hasil kursor pencarian
- 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"
import arcpy
patut 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.import arcpy
garis. Terakhir kali saya menggunakan arcpy lambat untuk mengimpor dari luar. ArcGIS akan memiliki yang sudah diimpor di Python internal sehingga impor sudah di-cache.General python doc
] [ docs.python.org/2/library/profile.html] dan [stackexchange posting
] [ stackoverflow.com/questions/582336/… .Jawaban:
@ Harun: memposting ulang komentar saya sebelumnya sebagai jawaban berdasarkan sarannya:
Bisa melangkah lebih jauh dan profil. [Dokumen python umum] dan [posting stackexchange] .
Pasti tertarik mendengar apa yang dia temukan.
sumber
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.
sumber