আর্কজিআইএস পাইথন সার্চকার্সার ফাইল লকিং?


11

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা ব্যবহারকারীর কাছে ফিরে আসার জন্য শেফফিলের ক্ষেত্র থেকে একটি মান পায়।

মনে হয় কেবল যখন আরকিপি.সন্ধান সার্ভারকে আর্কম্যাপ 10.0 বলা হয় তখন ফাইলটি লক হয়ে যায় এবং স্ক্রিপ্টটি শেষ হওয়ার পরে এটি মুছে ফেলা হয় না। লকটি বন্ধ করতে আমাকে আরকাপ্যাপ বন্ধ করতে হবে। স্ক্রিপ্টে আমি সার্চকার্সার অবজেক্টটি পাশাপাশি সারি অবজেক্টটি ব্যবহার করার পরে মুছুন।

আমার স্ক্রিপ্টটি যেভাবে কাজ করছে তা হ'ল এটি পরবর্তী রানগুলিতে ওয়ার্কস্পেস ফোল্ডারটি মোছার চেষ্টা করে তবে লক হওয়ার কারণে তা করতে পারে না ... অবশ্যই আমি আর্কম্যাপটি বন্ধ করি না until

এই লকটি চলে যাওয়ার বিষয়ে কোনও পরামর্শ আছে কি?

উত্তর:


4

এখান থেকে যাওয়ার পরে সমস্যার সমাধান হয়েছিল:

rows = arcpy.UpdateCursor(fc)   
delete = rows.deleteRow  
for row in rows:  
    delete(row)  
del row  
del rows

প্রতি

rows = arcpy.UpdateCursor(fc)
for row in rows:
    rows.deleteRow(row)
del row
del rows

3

দেখুন ক্যান ফাইল geodatabase এবং পাইথন স্ক্রিপ্ট তৈরি বৈশিষ্ট্য বর্গ লক পরিত্রাণ পেতে না । এটা একই ইস্যু মত দেখাচ্ছে। আমি স্পষ্টভাবে বৈশিষ্ট্য শ্রেণি মুছে ফেলার মাধ্যমে এর চারপাশটি অর্জন করেছি। আমি নিশ্চিত নই যে এটি সব ক্ষেত্রে কার্যকর হবে কিনা।

import arcpy

fcPath = 'c:/temp/features.shp'
idFld = 'OBJECTID'
cur = arcpy.SearchCursor(fcPath)
for row in cur:
    id = row.getValue(idFld)
    row = None
cur = None
r = arcpy.Delete_management(fcPath)

print r.getOutput(0)

জঞ্জাল সংগ্রহের জন্য জোর করে কাজও করতে পারে তবে আমার কুঁচকটি এটির আরকি বা আর্কম্যাপের অভ্যন্তরীণ কাজগুলির সাথে কিছু করার আছে।

import gc
gc.collect()

আমি এটি সম্পাদনা করেছি, কার্সারের প্রতিটি পুনরাবৃত্তির পরে সারি রেফারেন্সটি মুছে ফেলা উচিত, অন্যথায় লুপের বাইরে থাকা কল্পনা অতিরিক্ত নয়। এটি আমিও একইভাবে ভোট দিয়েছি যখন আমার কাছে এটি ছিল তখনই আমি একই সমস্যাটি পেয়েছিলাম।
হিরি

@ চুল ঠিক আছে, তবে আমি মনে করি এটি একটি নিঃশব্দ। পাইথন প্রতিটি পুনরাবৃত্তির পূর্ববর্তী সারির বস্তুর উল্লেখগুলিকে হ্রাস করে যখন সারি ভেরিয়েবলকে একটি নতুন সারি অবজেক্ট বরাদ্দ করা হয় । লুপটি কেবল শেষ সারি অ্যাসাইনমেন্টটি পরিষ্কার করার পরে। এটিকে লুপের ভিতরে স্থানান্তর করা হ'ল চেষ্টাটির সদৃশ। যাই হোক না কেন, আবর্জনা সংগ্রহকারীকে মেমরিটি হ্রাস করা উচিত যদি না আরকি বা আরক্যাপ ম্যাপের অভ্যন্তরীণভাবে সারি সামগ্রীর একটি রেফারেন্স বজায় না রাখে। row = None
থারেন

একমত হতে সম্মত হওয়া ঠিক আছে, বা এটি একটি মূল বিষয় oot আমি জানি যে তোরণে আবর্জনা সংগ্রহ ত্রুটিযুক্ত এবং আপনি যদি এটি বন্ধ করেন তবে এটি আসলে অনেক দ্রুত। সারিটি সারিতে কিছুই নির্ধারণ না করে, আমি জানি এটি সেভাবে আরও ভালভাবে কাজ করে। কেউ কেউ বলে যে কারও কাছে কিছু স্থাপন করা অতিরিক্ত কাজ নয়, তবে তা তা নয়। আপনার স্ক্রিপ্টের শুরুতে আপনার আবর্জনা সংগ্রহ বন্ধ করে দিন এবং সময়ের পার্থক্যগুলি পরিমাপ করুন। আমিও দেল সারি ব্যবহার, সারি = কেউ নয়, কিন্তু যে অন্য dicussion আছে: ব্যবহার করে দেখুন আমদানি জিসি gc.disable ()
লোমশ

@ হায়িরি, জিসি অক্ষম করার বিষয়টি আমার কাছে ঘটেনি। আমি এটা চেষ্টা করে দেখব.
থারেন

এটি আমার পক্ষে কাজ করে না কারণ আমার বৈশিষ্ট্য শ্রেণীর প্রয়োজন। এছাড়াও আমি পরে অন্য একটি বৈশিষ্ট্য শ্রেণিতে একটি আপডেট কার্সার পাই এবং এটি লক হয়ে যায়। আমার যেখানে থাকা দরকার সেখানে পৌঁছানোর জন্য আমি আয়না এবং হাতের নিদ্রা ব্যবহার করে শেষ করেছি। এটি কতক্ষণ ধরে রাখবে তা নিশ্চিত নয়। ধন্যবাদ।
জাস্টিন

1

আপনার আর্কেম্যাপের ভিতরে থেকেই আপনার আরকিপি স্ক্রিপ্টটি চালানো দরকার? আপনি তৈরি করেছেন এমন কোনও ইন্টারফেস বা টুলবক্সের অংশ না থাকলে আপনি পাইথন কনসোল, আইডিএল বা এক্সিলিপস ইত্যাদি থেকে আর্কম্যাপের বাইরে চালাতে পারবেন (যতক্ষণ না এটির মেশিনটিতে আপনার উপযুক্ত লাইসেন্স রয়েছে)। যদি এটি হয় তবে আপনি আপনার আরকপি স্ক্রিপ্টটিকে সাবপ্রসেস হিসাবে স্প্যান করতে একটু পাইথন কোড লিখতে পারেন এবং সাবপ্রসেস বন্ধ হয়ে গেলে লকটি প্রকাশ করা উচিত।

আর্কজিআইএস লকগুলি একটি ব্যথা। আমার এমন পরিস্থিতি হয়েছিল যেখানে মেশিনটি বন্ধ করার পরেও একটি লক অবিরত থাকে, যা একটি স্মরণীয় ব্যথা (সাধারণত যদি আর্কটি লকগুলি পরিষ্কার করার আগে ক্র্যাশ হয়ে যায়)। শেষ অবলম্বন হিসাবে, যদি এটি ঘটে থাকে তবে। লক ফাইলটি সন্ধান করতে উইন্ডোজ এক্সপ্লোরার ব্যবহার করুন এবং ম্যানুয়ালি মুছুন। এটি আর্কম্যাপ বা পাইথন প্রক্রিয়া দ্বারা অ্যাক্সেস করা থাকলে এটি কাজ করবে না, সুতরাং এটি তুলনামূলকভাবে নিরাপদ ... তবে এটি সত্যিই জেল-অফ-জেল কার্ড এবং ভাল অনুশীলন নয় :)


1

আপনি যদি সঠিকভাবে সারি এবং কার্সার উভয় বস্তু (উদাঃ del row, rows) মুছে ফেলছেন এবং লকটি রয়ে গেছে, তবে সম্ভবত এটি আর্কম্যাপ নিজেই, আরকি নয়, এখনও রেফারেন্স করছে।

শেফফাইলটি বিষয়বস্তুর সারণীতে কোনও স্তর দ্বারা রেফারেন্স করা হয়েছে, বা এটি আপনার স্ক্রিপ্ট সরঞ্জাম দ্বারা টিওসি-তে যুক্ত করা হয়েছে?

যদি পরবর্তীটি হয়, আপনি আর্কম্যাপে জিওপ্রসেসিং-> জিওপ্রোসেসিং বিকল্পগুলির অধীনে "প্রদর্শনে জিওপ্রসেসিং অপারেশনের ফলাফল যুক্ত করুন" অক্ষম করার চেষ্টা করতে পারেন ।

একটি অতিরিক্ত পরামর্শ: আপনি যদি অস্থায়ী / মধ্যবর্তী ডেটাসেট হিসাবে এটি করছেন এবং বৈশিষ্ট্যের সংখ্যা খুব বেশি না in_memoryহয় তবে লকিংয়ের সমস্যাটি পুরোপুরি ঘনিয়ে নেওয়ার জন্য শেফফাইলের পরিবর্তে ওয়ার্কস্পেসটি ব্যবহার করার চেষ্টা করুন এবং পাশাপাশি একটি দুর্দান্ত সম্ভাব্য পারফরম্যান্স বৃদ্ধি পেতে পারেন ।

স্ক্রিপ্ট থেকে বেরিয়ে আসার আগে কেবল ইন-মেমরি ওয়ার্কস্পেস বা নির্দিষ্ট ডেটাসেটগুলি আপনি মুছে ফেলুন (ডেটা ম্যানেজমেন্ট) ব্যবহার করে মুছে ফেলার বিষয়ে নিশ্চিত হন , অন্যথায় অ্যাপ্লিকেশনটি বন্ধ না হওয়া পর্যন্ত এটি স্মৃতিতে অবিরত থাকবে।

অবশেষে আমি এটিও নোট করব যে যখন আপনি সামগ্রীর টেবিল থেকে কোনও স্তর সরিয়ে ফেলবেন তখন লক ফাইলগুলি সরিয়ে না দিয়ে শেপফিল লকিং আচরণটি 10.0 এ পরিবর্তিত হয়ে আরও কঠোর হয়ে উঠল। এই নিবন্ধ এবং এই সম্পর্কিত প্রশ্নটি দেখুন


এটি অবশ্যই আর্কম্যাপ। আমি মনে করি একটি কার্সার কল করা পূর্ববর্তী কার্সার লককে হত্যা করে। আমি একটি এফসি-তে একটি সার্চকার্সার কল করি..এরপর অন্য একটি চাঁদে একটি আপডেট কার্সার এবং পূর্ববর্তী লকটি চলে যায়। আমি কোনও ফাইলটিতে একটি থ্রিমড ডামি কার্সার কল করতে পারি যা কেবলমাত্র ব্লক বক্স স্টাইল লক হ্যান্ডল করার জন্য মুছতে হবে না। ধন্যবাদ।
জাস্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.