सुविधा वर्ग पर ताला हटा दें


11

जब मैं एक आर्कगिस इंजन ऐप के उपयोग के दौरान या उसके बाद एक फीचर क्लास को हटाने की कोशिश करता हूं, जो उसी फीचर क्लास का उपयोग करता है जिसे मुझे लॉक से संबंधित एक त्रुटि मिली, इसलिए मैं कंप्यूटर को पुनरारंभ करने तक इस लॉक की सवारी नहीं कर सकता।

मैं आर्कपी या आर्कोबजेक्ट्स 10.1 का उपयोग करके ताले को हटाने का एक तरीका जानना चाहता हूं, यह सही होगा यदि मुझे आर्केंगाइन ऐप के अंदर लॉक की सवारी मिल सकती है जो कि जियोडैटबेस को भी लॉक करता है, मैंने अलग-अलग पोस्ट को एसई में ताले के साथ देखा है, लेकिन कोई भी नहीं उनमें से ArcObjects का उपयोग करके मुफ्त तालों को हल देता है।


1
कुछ समय पहले मेरा भी ऐसा ही सवाल था ( gis.stackexchange.com/q/28977/8104 )। मुझे तालों के बारे में कोई उत्तर नहीं मिल पा रहा था, हालाँकि मेमोरी ऑब्जेक्ट्स को हटाने के बारे में अच्छी जानकारी थी।
आरोन

जवाबों:


12

यदि आप आर्कपी स्क्रिप्टिंग का उपयोग कर रहे हैं, तो 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....

3
लॉक होने पर कॉम्पैक्ट काम नहीं करता है। जब आप FGDB के बहुत सारे ऑपरेशन चलाते हैं, लेकिन यह अपने स्वयं के रनटाइम की लागत पर वास्तव में प्रदर्शन को बढ़ा देगा।
मिकालिस अवराम

बस सोच रहा था कि दो बार क्यों होता है, मेरा मतलब है कि अगर स्पष्ट (तीसरे) में तीसरा कथन?
माकक

मैं सहमत हो सकता हूं, मुझे ताले साफ करने के लिए नहीं मिला है। :( और मैंने अब तक कई अलग-अलग चीजों की कोशिश की है।
विदुर

8

एक फ़ाइल जियोडेटाबेस में 3 प्रकार के ताले होते हैं।

  1. एसआर - स्कीमा लॉक
  2. आरडी - लॉक पढ़ें
  3. ईडी - एडिट लॉक

@StacyR द्वारा प्रस्तावित समाधान के लिए छोड़कर सभी परिस्थितियों में काम करेंगे अनन्य ताले (ईडी) ArcGIS सहायता दस्तावेज़ के अनुसार संपादित करें।

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007t000000


7

यदि आपके कोड द्वारा ताले बनाए जा रहे हैं, तो आप स्वयं सफाई नहीं कर रहे हैं। सभी संदर्भों को फ़ीचर क्लासेस, वर्कस्पेस, कर्सर आदि पर छोड़ दें। ताले तब हटाए जाते हैं जब आपके पास ऑब्जेक्ट्स के लॉक होने का कोई और संदर्भ नहीं होता है।


1
मुझे पता है कि यह धागा बहुत पुराना है, लेकिन मुझे एक समस्या आ रही है कि मैं आर्कपी के भीतर एक एफजीडीबी को हटा सकता हूं। आप वास्तव में "फीचर क्लास, वर्कस्पेस, कर्सर्स इत्यादि के सभी संदर्भों को जारी करें" से क्या मतलब है। मैं उक्त संदर्भों को कैसे जारी करूंगा?
GeoJohn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.