जब मैं एक आर्कगिस इंजन ऐप के उपयोग के दौरान या उसके बाद एक फीचर क्लास को हटाने की कोशिश करता हूं, जो उसी फीचर क्लास का उपयोग करता है जिसे मुझे लॉक से संबंधित एक त्रुटि मिली, इसलिए मैं कंप्यूटर को पुनरारंभ करने तक इस लॉक की सवारी नहीं कर सकता।
मैं आर्कपी या आर्कोबजेक्ट्स 10.1 का उपयोग करके ताले को हटाने का एक तरीका जानना चाहता हूं, यह सही होगा यदि मुझे आर्केंगाइन ऐप के अंदर लॉक की सवारी मिल सकती है जो कि जियोडैटबेस को भी लॉक करता है, मैंने अलग-अलग पोस्ट को एसई में ताले के साथ देखा है, लेकिन कोई भी नहीं उनमें से ArcObjects का उपयोग करके मुफ्त तालों को हल देता है।
कुछ समय पहले मेरा भी ऐसा ही सवाल था ( gis.stackexchange.com/q/28977/8104 )। मुझे तालों के बारे में कोई उत्तर नहीं मिल पा रहा था, हालाँकि मेमोरी ऑब्जेक्ट्स को हटाने के बारे में अच्छी जानकारी थी।
यदि आप आर्कपी स्क्रिप्टिंग का उपयोग कर रहे हैं, तो 10.1 के साथ डेटा लॉक समस्याएँ और भी समस्याग्रस्त हो गई हैं ।
यदि आपके कोड द्वारा ताले बनाए जा रहे हैं, तो आप स्वयं सफाई नहीं कर रहे हैं। सभी संदर्भों को फ़ीचर क्लासेस, वर्कस्पेस, कर्सर आदि पर छोड़ दें। ताले तब हटाए जाते हैं जब आपके पास ऑब्जेक्ट्स के लॉक होने का कोई और संदर्भ नहीं होता है।
ठीक है, यह वह तरीका है जो काम करना चाहिए, लेकिन यह शायद ही कभी करता है। आमतौर पर एक कोड कभी-कभी काम करेगा, लेकिन अक्सर अलग-अलग जगहों पर बेवजह दुर्घटना करता है।
समस्या यह प्रतीत होती है कि ताले को 'थोड़ी देर के लिए' वहां बैठे हुए छोड़ दिया जाता है, लेकिन कोड उस गति से बहुत तेज चलता है जिस पर ताले हटा दिए जाते हैं। हालाँकि, कुछ इनबिल्ट आर्क टूल्स लॉक करने के लिए मजबूर करते हैं जो डिमांड पर क्लियर किए जाते हैं (जैसे कि लॉक एक ही बार में पूरे जीडीबी पर लागू होते हैं, एक लॉक आपको किसी भी फीचर क्लास के साथ काम करने से रोकेगा)। ये उपकरण हैं arcpy.Compact_management () और arcpy.Exists ()।
यहाँ एक छोटा सा फ़ंक्शन है जो मैं अपने कोड के भीतर उपयोग करता हूं जिसमें नाटकीय रूप से विश्वसनीयता बढ़ी है (एक स्क्रिप्ट के लिए जो उनके भीतर कई GDBs और फ़ीचर क्लासेस को बनाता और संपादित करता है):
def clearWSLocks(inputWS):'''Attempts to clear locks on a workspace, returns stupid message.'''if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):return'Workspace (%s) clear to continue...'% inputWS
else:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWS
इसका उपयोग केवल कार्यक्षेत्र (GDB) पथ को कार्य करने के लिए पास करने के लिए किया जाता है, और कार्यक्षेत्र (अर्थात GDB निर्माण) या फ़ीचर क्लासेस पर प्रत्येक ऑपरेशन के बाद कार्यक्षेत्र (यानी Cursors, फ़ील्ड्स, परिकलन आदि) को जोड़कर किया जाना चाहिए। । उदाहरण के लिए (यहां एक स्टैंडअलोन स्क्रिप्ट के रूप में दिखाया गया है, शीर्ष पर फ़ंक्शन के साथ; फ़ंक्शन का उपयोग करने के लिए, इसे कॉपी करें और आयात और वास्तविक कार्यक्रम के बीच पेस्ट करें, जैसा कि यहां दिखाया गया है):
import arcpy
def clearWSLocks(inputWS):'''Attempts to clear locks on a workspace, returns stupid message.'''if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):return'Workspace (%s) clear to continue...'% inputWS
else:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWS
GDBpath='C:/Temp/'GDBname='Test.gdb'
tableName ='SweetFC'
arcpy.CreateFileGDB_management(GDBpath,GDBname)print(clearWSLocks(GDBpath+GDBname))
arcpy.CreateTable_management(GDBpath+GDBname, tableName)print(clearWSLocks(GDBpath+GDBname))# etc....
लॉक होने पर कॉम्पैक्ट काम नहीं करता है। जब आप FGDB के बहुत सारे ऑपरेशन चलाते हैं, लेकिन यह अपने स्वयं के रनटाइम की लागत पर वास्तव में प्रदर्शन को बढ़ा देगा।
यदि आपके कोड द्वारा ताले बनाए जा रहे हैं, तो आप स्वयं सफाई नहीं कर रहे हैं। सभी संदर्भों को फ़ीचर क्लासेस, वर्कस्पेस, कर्सर आदि पर छोड़ दें। ताले तब हटाए जाते हैं जब आपके पास ऑब्जेक्ट्स के लॉक होने का कोई और संदर्भ नहीं होता है।
मुझे पता है कि यह धागा बहुत पुराना है, लेकिन मुझे एक समस्या आ रही है कि मैं आर्कपी के भीतर एक एफजीडीबी को हटा सकता हूं। आप वास्तव में "फीचर क्लास, वर्कस्पेस, कर्सर्स इत्यादि के सभी संदर्भों को जारी करें" से क्या मतलब है। मैं उक्त संदर्भों को कैसे जारी करूंगा?