मैं सोच रहा था कि क्या यहाँ के समुदाय में किसी और ने स्थानिक विश्लेषण के लिए मल्टी-प्रोसेसिंग का उपयोग करने का प्रयास किया है। पूरी तरह से मैं एक श्रृंखला के माध्यम से चीर-फाड़ करने की कोशिश कर रहा हूं, प्रत्येक के लिए एक मल्टीप्रोसेसिंग जॉब बनाऊंगा और उन्हें एक डीईएफ फ़ंक्शन के भीतर कई जियोप्रोसेसिंग चरणों के माध्यम से चलाऊंगा। की तर्ज पर कुछ
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
। ये सामान्य-प्रयोजन के काम के लिए अच्छे सुझाव नहीं हैं, क्योंकि वे इसके लायक होने की तुलना में अधिक परेशानी हो सकते हैं, लेकिन जब आप एक बार में घंटों की बचत कर सकते हैं, तो बार-बार प्रयास बंद हो सकता है।