ArcGIS 10.1 Python AddIn मल्टीप्रोसेसिंग क्रैश का उपयोग करना ArcMap?


20

मैं अजगर ऐड-इन टूल से मल्टीप्रोसेसिंग टास्क चलाना चाहूंगा। मेरा मुद्दा यह है कि प्रक्रिया विफल रहती है। मूल रूप से ArcMap दुर्घटनाओं।

यहाँ मेरा मूल कोड है:

def function(startOID, endOID, fc):

    wrksp = r"c:\temp\mp_addintest\data\test_%s.txt" % (int(startOID) + int(endOID))
    # real logic removed to dumb it down
    with open(wrksp, 'w') as writer:
        writer.write("%s to %s from %s \n" % (startOID, endOID, fc))
    return wrksp
class btnMP(object):
    """Implementation for src_addin.MPButton (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        pool = None
        try:
            pythonExe = os.path.join(sys.exec_prefix, 'python.exe')
            multiprocessing.set_executable(pythonExe)
            pool = multiprocessing.Pool(4)
            results = []
            for i in xrange(4):
                results.append(pool.apply_async(function, [str(1),
                                      str(i),
                                      str("test")]))
            pool.close()
            pool.join()
            for result in results:
                print result.get()
        except:
            del pool
            print 'error'

यदि मैं आर्कपेक के बाहर या टूलबॉक्स से कोड चलाता हूं, तो यह बिना किसी समस्या के काम करता है, लेकिन जब मैंने तर्क को एक बटन के अंदर रखा, तो यह arcmap को क्रैश करने का कारण बनता है।

मेरा अनुमान है कि आर्केप सभी अजगर ऐड-इन्स के लिए प्रक्रिया में चल रहा है। क्या इस मुद्दे पर कोई काम हो रहा है?

मैंने कोड के साथ freeze_support () में भी जोड़ने की कोशिश की है, लेकिन उसने कुछ भी नहीं किया।


1
यदि ArcMap क्रैश हो रहा है, तो अपने ESRI समर्थन से संपर्क करें। अगर वे इसे दोहरा सकते हैं, तो वे इसके बग को स्वीकार करेंगे (और शायद एक दिन इसे ठीक भी कर लें)।
जीआईएस-जोनाथन

क्या आपने ArcGIS 10.x के लिए सभी 5 सर्विस पैक स्थापित किए हैं जो पहले से ही बाहर हैं? शायद वह मदद करेगा
सर्जियोस कॉलियोस


सर्विस पैक भी संचयी हैं, इसलिए आपको केवल नवीनतम एक को स्थापित करने की आवश्यकता है, प्रत्येक उत्तराधिकार में नहीं।
blah238

10.1 के लिए SP1 इस सप्ताह जारी किया गया था।
टिमोथी माइकल

जवाबों:


8

समानांतर प्रसंस्करण आसान है 'की तुलना में दिखाया गया है।' यह सब एक बटन में भरने के मामले में, मैं दो मुद्दों का अनुमान लगा रहा हूं:

  1. एकाधिक थ्रेड्स ArcMap UI थ्रेड को ब्लॉक करते हैं, या
  2. ArcMap डेटा स्रोत पर अपना स्वयं का स्कीमा लॉक डालता है और डेटा के लिए अजगर प्रक्रिया की अनुमति नहीं देता है।

Hmm आगे के मुद्दे को आर्कगिस रिसोर्सेज पेज में यहां प्रलेखित किया गया है । स्कीम लॉक अपराधी की तरह दिखता है।


निश्चित नहीं है कि अगर आपने जो कुछ किया है, उसके अलावा कुछ जोड़ने का मतलब है (एक आर्कगिस फ़ोरम पोस्ट, आधिकारिक दस्तावेज़ नहीं)।
ब्लाह 238

फोरम सही लिंक है। जब किसी को अधिक आधिकारिक दस्तावेज मिलते हैं तो वे इसे पोस्ट करने के लिए स्वतंत्र महसूस कर सकते हैं।
वुल्फऑर्ड्रेड

आपके सुझावों के लिए धन्यवाद। मेरा मानना ​​है कि यह वास्तव में # 1 के कारण होता है। ArcMap UI के लिए थ्रेड ब्लॉक। मैं एक एसडीई डेटाबेस का उपयोग कर रहा हूं, इसलिए स्कीमा ताले मेरे मुद्दे नहीं हैं।
कोड बेस 5000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.