Tôi đang cố xử lý một số dữ liệu raster bằng ogr / gdal và dường như tôi không thể sử dụng hết tất cả các lõi trên máy của mình. Khi tôi chỉ chạy quy trình trên một lõi đơn, tôi sẽ sử dụng 100% lõi đó. Khi tôi cố gắng phân chia thành đa lõi (trong ví dụ dưới đây, bằng cách chia nhỏ các x offset và đặt chúng vào hàng đợi), tôi nhận được việc sử dụng thảm hại trên mỗi 8 lõi của mình. Có vẻ như nó chỉ bổ sung tối đa 100% mức sử dụng trên mỗi lõi (ví dụ 12,5% cho mỗi lõi).
Tôi lo ngại rằng việc sử dụng cùng một nguồn dữ liệu là nút cổ chai, nhưng sau đó tôi đã sao chép tệp raster bên dưới cho mỗi lõi ... và việc sử dụng lõi vẫn còn tào lao. Điều này khiến tôi tin rằng ogr hoặc gdal bằng cách nào đó hành xử giống như một tài nguyên chia sẻ tắc nghẽn nhưng tôi không thể tìm thấy bất cứ điều gì trực tuyến về điều đó. Bất kì sự trợ giúp nào đều được đánh giá cao!
Đây là chức năng "trợ giúp" chạy bên trong mỗi luồng Công nhân:
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()])