多处理新手希望与numpy一起工作。
我有一个脚本可以分割图像,并将图像的可变大小块创建为numpy数组。
np_array = gdal.ReadAsArray()
过去我已经连续处理过这个数组,没问题。从这里的一些帖子来看,我最好的选择是将数组转换为ctypes,将其切片,然后将切片发送到多个multiprocessing.Pool。我有一个我正在分割的多波段图像,所以下面的代码在main()
中 Open the dataset...
Get the first band...
Grab a small segment of that band (these are huge images) and open to nparray
#Convert to ctypes to allow multiprocessing
c_pointer = ctypes.POINTER(ctypes.c_byte) #Here I need a dict of gdal to ctypes conversions.
shared_array = np_array.ctypes.data_as(c_pointer)
shared_array.reshape(intervalx, intervaly)
def my_func(i, def_param=shared_array):
#perform my stretch here
pass
pool = multiprocessing.Pool()
pool.map(my_func, range(10))
print shared_array
我理解需要在中间代码中使用def语句,因为我将shared_array作为参数传递。还有更好的方法吗?
此时,我的代码崩溃......很难。我错过了什么?这不是用numpy数组处理并行处理类型的方法吗?
最后,这些是图像,我需要能够维持数组的顺序。这可能吗,还是我需要使用锁?如果是这样,从numpy或多处理。
任何指向信息的链接,试图学习如何在共享内存空间中处理多处理numpy数组。
P.S。我希望尽可能避免使用numpy_sharedmem模块,因为我想限制潜在用户的额外下载次数。