जियोप्रोसेसिंग गति परीक्षणों के लिए असामान्य परिणाम


9

मैं पायथन जियोप्रोसेसिंग स्क्रिप्ट के साथ असामान्य प्रदर्शन देख रहा हूं। स्क्रिप्ट (संलग्न) स्क्रिप्ट निम्नलिखित क्रियाएं करती है:

  1. बहुभुज सुविधाओं के अनुरूप UTM ज़ोन देखने के लिए एक खोज कर्सर का उपयोग करें
  2. खोज कर्सर परिणामों के आधार पर स्थानिक संदर्भ ऑब्जेक्ट बनाएं
  3. कन्वर्ट .csv को लेयर और फिर एक पॉइंट फीचर क्लास में

मैंने स्क्रिप्ट के चलने के आधार पर स्पष्ट रूप से भिन्न प्रसंस्करण समय देखा है:

  • आईडीएल = 203 सेकंड का उपयोग करके 32-बिट प्रसंस्करण
  • 32-बिट प्रसंस्करण अग्रभूमि स्क्रिप्ट उपकरण = 91 सेकंड
  • 64-बिट प्रोसेसिंग बैकग्राउंड स्क्रिप्ट टूल = 206 सेकंड

यह स्क्रिप्ट उपरोक्त स्थितियों को देखते हुए अलग-अलग प्रदर्शन क्यों करेगी? मैं निश्चित रूप से उम्मीद नहीं करूंगा कि 32-बिट स्क्रिप्ट टूल अग्रभूमि में 2X के रूप में अन्य विधियों के रूप में तेज़ हो।


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"

1
आर्कपी को आयात करने में कितना समय लगता है? क्या पोस्ट में कोई फ़ॉर्मेटिंग त्रुटि है। कोशिश करनी चाहिए: लूप के लिए अंदर होना चाहिए?
नाथन डब्ल्यू

2
मुझे लगता है कि @ नातनव्यू के बारे import arcpyमें पहले ध्यान देने योग्य बात है क्योंकि ऐसा लगता है कि समय केवल आपके तीन परीक्षणों के आईडीएलई और 64 बिट मार्गों द्वारा आवश्यक है, लेकिन लगभग दो मिनट जोड़ना अत्यधिक लगता है। एक उपकरण चलाने की कोशिश करें जो आर्कपी के आयात के समय से अधिक कुछ नहीं करता है।
PolyGeo

3
मैं कहना बहुत सुरक्षित होगा कि यह import arcpyरेखा है। पिछली बार मैंने आर्कपी का इस्तेमाल किया था जो बाहर से आयात करने में धीमा था। आर्कगिस के पास पहले से ही अपने आंतरिक पायथन में आयात होता है, इसलिए आयात पहले से ही कैश है।
नाथन डब्ल्यू

3
@ नथन और अन्य बिल्कुल सही हैं। IDLE या कमांडलाइन के माध्यम से एक प्रक्रिया को चलाने पर एक हिट लगती है जब आप 'आयात आर्कपी' कहते हैं। हालाँकि, आप बहुत बड़ी प्रक्रियाओं के लिए एक ट्रेड-ऑफ़ प्राप्त कर सकते हैं जहाँ आपको बेहतर प्रदर्शन के माध्यम से समय मिलता है। एक पृष्ठभूमि प्रक्रिया चलाने में भी एक समय हिट होता है क्योंकि आर्कगिस प्रभावी एक और आर्कपैम सत्र शुरू करता है। अंत में, आपके पास अन्य चर भी हैं जिन्हें आपको अपने परीक्षण में समाप्त करने की आवश्यकता है जैसे कि आपके 32 और 64 बिट मशीनों के बीच हार्डवेयर में क्या अंतर हैं और आपके परीक्षण आदि के दौरान अन्य कौन से प्रक्रिया संसाधनों का उपभोग कर रहे थे?
मप्पाग्नोसिस

2
+1 @ जयलौरा। और आगे जा सकते हैं। [ General python doc] [ docs.python.org/2/library/profile.html] और [ stackexchange posting] [ stackoverflow.com/questions/582336/…
रोलैंड २

जवाबों:


2

@ ऐरन: मेरी पूर्व टिप्पणी को उनकी सलाह के आधार पर उत्तर के रूप में प्रस्तुत करना:

और आगे जा सकते हैं। [सामान्य अजगर डॉक्टर] और [स्टैकएक्सचेंज पोस्टिंग]

निश्चित रूप से सुनने में दिलचस्पी है कि वह क्या पाता है।


6

मेरे पास एक सिद्धांत है।

मुझे लगता है कि मुद्दा आपके आउटपुट या आपके इनपुट की मान्यता हो सकती है। जीपी उपकरण चलने से पहले, आर्कपी मापदंडों को मान्य करता है, उदाहरण के लिए, क्या आउटपुट फीचर क्लास पहले से मौजूद है।

ArcMap के भीतर, कार्यक्षेत्र (फ़ोल्डर) सामग्री सभी कैश हैं और सत्यापन कार्यक्षेत्र के "दृश्य" के खिलाफ किया जा सकता है - स्मृति में - तेजी से। यदि डेटासेट को गैर-आर्कगिस टूल का उपयोग करके जोड़ा जाता है, तो भ्रम पैदा हो सकता है, कार्यक्षेत्र (फ़ोल्डर) की स्थिति के साथ कैटलॉग दृश्य को सिंक करने के लिए एक चापलूसी की आवश्यकता होती है।

यदि आपका फ़ोल्डर बहुत बड़ा है, और आप आर्कजीआईएस के बाहर चल रहे हैं, तो आपके फ़ीचरक्लासटॉफ़्ट्योरक्लास आउटपुट को मान्य करने के लिए हर बार आर्कफी को एक फ़ोल्डर लिस्टिंग उत्पन्न करना पड़ सकता है। यदि फ़ोल्डर में कई आइटम हैं, तो यह वास्तव में धीमा हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.