Ogr / gdal kullanarak bazı raster verilerini işlemeye çalışıyorum ve makinemdeki tüm çekirdeklerden tam olarak yararlanamıyorum. İşlemi yalnızca tek bir çekirdek üzerinde yürüttüğümde, bu çekirdeğin% 100'ünü kullanıyorum. Çok çekirdekli olarak ayırmaya çalıştığımda (aşağıdaki örnekte, x ofsetlerini toplayıp sıraya koyarak), 8 çekirdeğimin her birinde acıklı bir kullanım elde ediyorum. Her bir çekirdeğe sadece% 100'e kadar kullanım katıyor gibi görünüyor (örneğin, her birinde% 12.5).
Aynı veri kaynağını kullanarak darboğazdan endişeliydim, ama sonra her bir çekirdek için altta yatan raster dosyasını çoğalttım ... ve çekirdek kullanımı hala saçmalık. Bu, ogr veya gdal'ın bir şekilde bir darboğaz paylaşılan kaynağı gibi davrandığına inanmamı sağlıyor, ancak bu konuda çevrimiçi bir şey bulamıyorum. Herhangi bir yardım çok takdir edilecektir!
Bu, her İşçi iş parçacığının içinde çalışan "yardımcı" işlevidir:
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()])