Numpy nd.array,ctypes,多处理

时间:2012-07-13 04:00:09

标签: python numpy multiprocessing python-2.6 gdal

多处理新手希望与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

来自SO - Link

我理解需要在中间代码中使用def语句,因为我将shared_array作为参数传递。还有更好的方法吗?

此时,我的代码崩溃......很难。我错过了什么?这不是用numpy数组处理并行处理类型的方法吗?

最后,这些是图像,我需要能够维持数组的顺序。这可能吗,还是我需要使用锁?如果是这样,从numpy或多处理。

任何指向信息的链接,试图学习如何在共享内存空间中处理多处理numpy数组。

P.S。我希望尽可能避免使用numpy_sharedmem模块,因为我想限制潜在用户的额外下载次数。

0 个答案:

没有答案