मैं ogr / gdal का उपयोग करके कुछ रेखापुंज डेटा को संसाधित करने का प्रयास कर रहा हूं और मुझे अपनी मशीन पर सभी कोर का पूर्ण उपयोग प्राप्त करने की आवश्यकता नहीं है। जब मैं केवल एक ही कोर पर प्रक्रिया चलाता हूं, तो मुझे उस कोर का 100% उपयोग मिलता है। जब मैं एक्स ऑफ़सेट्स को चुनकर और उन्हें एक कतार में रखकर मल्टीकोर (नीचे के उदाहरण में) में विभाजित करने की कोशिश करता हूं, तो मुझे मेरे प्रत्येक 8 कोर पर दयनीय उपयोग मिलता है। ऐसा लगता है कि यह केवल प्रत्येक कोर में 100% उपयोग को जोड़ता है (उदाहरण के लिए प्रत्येक पर 12.5%)।
मैं चिंतित था कि एक ही डेटा स्रोत का उपयोग अड़चन था, लेकिन मैंने तब प्रत्येक कोर के लिए अंतर्निहित रेखापुंज फ़ाइल को डुप्लिकेट किया था ... और कोर उपयोग अभी भी बकवास है। यह मुझे विश्वास दिलाता है कि ओगर या गदल किसी तरह एक अड़चन साझा संसाधन की तरह व्यवहार कर रहे हैं, लेकिन मुझे इसके बारे में कुछ भी ऑनलाइन नहीं मिल रहा है। कोई भी सहायताकाफी प्रशंसनीय होगी!
यह "हेल्पर" फ़ंक्शन है जो प्रत्येक वर्कर थ्रेड के अंदर चलता है:
def find_pixels_intersect_helper(datasource, bounds_wkt, x_min, x_max):
bounds = ogr.CreateGeometryFromWkt(bounds_wkt)
rows_to_write = []
for x_offset in range(x_min, x_max):
for y_offset in range(datasource.RasterYSize):
pxl_bounds_wkt = pix_to_wkt(datasource, x_offset, y_offset)
pxl_bounds = ogr.CreateGeometryFromWkt(pxl_bounds_wkt)
if pxl_bounds.Intersect(bounds):
rows_to_write.append(['%s_%s' % (x_offset, y_offset), pxl_bounds.Centroid().ExportToWkt()])