মাল্টিপ্রসেসিং ত্রুটি - আর্কজিআইএস বাস্তবায়ন


13

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

def net(RasterImage, OutFolderDir):
    arcpy.env.overwriteOutput = True  
    arcpy.env.workspace = OutFolderDir 
    DEM_Prj = DEM_Prj.tif

    try:
        arcpy.ProjectRaster_management(RasterImage, DEM_Prj....
        FocalStatistics(DEM_prj....)
        ...

if __name__ == '__main__':  
    InputFolder = r'C:\test\somepath'  
    Output = r'C:\test\somepath2'  
    arcpy.env.workspace = InputFolder  
    arcpy.env.scratchWorkspace = r'C:\test.gdb'    

    fcs = arcpy.ListRasters('*')
    pool = multiprocessing.Pool(4)   
    jobs = []                 
    for fc in fcs:
        rIn = os.path.join(InputFolder,fc)
        rOut = os.path.join(Output,fc[:-4])
        jobs.append(pool.apply_async(net,(rIn, rOut)))    

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

ERROR 010302: Unable to create the output raster: C:\somepath\sr6f8~1\FocalSt_srtm1
ERROR 010067: Error in executing grid expression.
Failed to execute (FocalStatistics).

এবং

ERROR 999999: Error executing function.
Failed to copy raster dataset
Failed to execute (ProjectRaster)

প্রথম ত্রুটিতে লক্ষ্য করুন যে ফোকাসের পরিসংখ্যানগুলির সাথে সম্পর্কিত (আউটফোল্ডারডির অবস্থানে) তৈরি করা অদ্ভুত ফোল্ডারটি প্রায় শেষের আউটপুটটির সঠিক প্রতিরূপ তৈরি করে।

আমার প্রশ্নটি আপনার অভিজ্ঞতার ভিত্তিতে তৈরি হয়েছে একটি মাল্টিপ্রসেসিং ফাংশনের মধ্যে বেশ কয়েকটি পদক্ষেপের জিওপ্রোসেসিং তৈরি করা কি অসম্ভব? বা এই পদক্ষেপগুলি তাদের পৃথক জিওপ্রসেসিং পদক্ষেপগুলিতে টাইল করার দরকার আছে কি?

হালনাগাদ

তবুও অনুরূপ ত্রুটিগুলি হস্তান্তর - ডিফ ফাংশনে আমদানি ফাংশনগুলি সরিয়ে নেওয়া দেখিয়েছে

import arcpy 
from arcpy.sa import *

একটি যুক্ত সিনট্যাক্স সতর্কতা দিয়ে আউটপুট তৈরি করতে পারে না যে আমদানির * অনুমোদিত নয়।

আপডেট # 2

আমি জানি এটি দেরি করে দেওয়া জবাব কিন্তু আমি ভেবেছিলাম ভবিষ্যতে আমার কাজের প্রতিবেদনের জন্য এটি অন্য কারও পক্ষে উপকৃত হতে পারে যা মাল্টিপ্রসেসিংকে আরকি দিয়ে কাজ করতে দেয়। এই সমস্যাটিতে ফিরে আসার পরে আমি যে প্রধান সমস্যাটি পেয়েছি তা হ'ল আরকি মডিউলগুলির প্রতিযোগিতা নয় বরং স্ক্র্যাচ ওয়ার্কস্পেসের প্রতিযোগিতা যা আর্কওবেক্টস অস্থায়ী ফাইলগুলি সংরক্ষণ করতে ব্যবহার করে। সুতরাং প্রতিটি প্রক্রিয়াটির জন্য একটি অনন্য স্ক্র্যাচ ওয়ার্কস্পেস তৈরির জন্য মাল্টিপ্রসেসিং পার্সিং আর্গুমেন্টে কাউন্টার চালানো বিবেচনা করুন

Counter = 0 
for fc in fcs:              
    rIn = os.path.join(InputFolder,fc)              
    rOut = os.path.join(Output,fc[:-4])                    
    jobs.append(pool.apply_async(net,(rIn, rOut,Counter)))            
    Counter += 1

তারপরে মূল ফাংশনে একটি নির্দিষ্ট অস্থায়ী ডিরেক্টরি তৈরি করুন এবং প্রতিটি মাল্টিপ্রসেসিং কার্যকে একটি অনন্য স্ক্র্যাচ ওয়ার্কস্পেস নির্ধারণ করুন।

def main(RasterImage,OutFolderDir,Counter)      
    TempFolder = os.path.join(os.path.dirname(OutFolderDir),'Temp_%s'%  (Counter))      
    os.mkdir(TempFolder)      
    arcpy.scratchWorkspace = TempFolder      
    ... 

আশা করি যা রাগিকে পৃথক টেম্প ওয়ার্কস্পেসগুলি ব্যবহারের মূল পরামর্শের জন্য সহায়তা এবং ধন্যবাদ জানায় - এটি মূলত কেন কাজ করে না তা নিয়ে এখনও বিস্মিত।

অতিরিক্ত সম্পদ

ইএসআরআই মাল্টিপ্রসেসিং ব্লগ

পাইথন, গিস এবং স্টাফ ব্লগ


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

উত্তর:


7

প্রতিটি আইওয়ার্কস্পেস সংযোগ (অর্থাত্ প্রতিটি ডাটাবেস সংযোগ) এর থ্রেড অ্যাফিলিটি থাকে। দুটি থ্রেড একই ওয়ার্কস্পেস ভাগ করতে পারে না। আপনার কাছে একটি থ্রেড রিসোর্সের মালিক হতে পারে এবং তারপরে অ্যাক্সেসটি সিঙ্ক করতে পারেন তবে আপনি যদি সরাসরি জিপি ফাংশন ব্যবহার করতে যাচ্ছেন তবে তা এমনকি কোনও বিকল্পও নয়।

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


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

আপনি কি কেবল রাস্টার অপারেশন করছেন? একই জিওডাটাবেসে একই সাথে পড়া / লেখার কোনও থ্রেড বা প্রক্রিয়া রয়েছে কি?
রাগী ইয়াসার বুড়হুম

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

কিছুটা পুনর্বিবেচনা করার পরে আমি প্রতিটি চিত্রের জন্য একটি নির্দিষ্ট স্ক্র্যাচ ওয়ার্কস্পেস নির্দিষ্ট করার চেষ্টা করেছি। ডিইএম সঠিকভাবে অনুমান করা হচ্ছে তবে এটি ফোকাল স্ট্যাটাস পর্যায়ে একটি নতুন ত্রুটি এনেছে - "টাইপ <রাস্টার> সমর্থিত নয়"। আমি পুরো ডিরেক্টরি ঠিকানা উল্লেখ করার চেষ্টা করেছি তবে কোনও ভাগ্য নেই। আমি কোনও সমস্যা ছাড়াই প্রত্যাশিত রেস্টারদের অর্কেজিতে লোড করেছি।
বিজেইবিএন

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

5

একই সংস্থানটির জন্য আপনার বেশ কয়েকটি থ্রেড প্রতিযোগিতা করছে।

আপনার 'আমদানি করা আরকি' বিবৃতিটি মাল্টিপ্রসেসিংয়ের লক্ষ্যে নিয়ে যাওয়ার চেষ্টা করুন। আপনি নিশ্চিত করবেন যে আরকিপি পরিবেশগত ভেরিয়েবল এবং মেমরির নিজস্ব সেট নিয়ে কাজ করছে।

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

আরকিটি থ্রেড নিরাপদ নয়। এটি সর্বদা একটি একক প্রক্রিয়ার মধ্যে ব্যবহার করার উদ্দেশ্যে ছিল। তবে কর্মক্ষেত্র রয়েছে।


আমার পরামর্শ ছিল নতুন প্রক্রিয়ার জন্য লক্ষ্যটির মধ্যে আরকি আমদানি করা।

def _multiprocessing_target(args):
    import arcpy
    ...code

হাই, আপনার পরামর্শের জন্য ধন্যবাদ ... যদিও আমার মনে হয় এখনও সমস্যা আছে। আপনি যখন মাল্টিপ্রসেসিংয়ের লক্ষ্যে 'অর্কিটি ইমপোর্ট করুন' উল্লেখ করেন আপনি কি if__ নাম ... বিবৃতিতে বা আসলে ডিএফ ফাংশনের মধ্যে বোঝাতে পারেন? যেমন আমি ভেবেছিলাম ডিএফ ফাংশনে আমদানিটি অবৈধ।
বিজেইবিএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.