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から- リンク
パラメーターとして shared_array を渡しているため、コードの途中に def ステートメントが必要であることを理解しています。より良い方法はありますか?
この時点で、私のコードはクラッシュしています...ハード。私は何が欠けていますか?これは、numpy配列を使用した並列処理のタイプを処理する方法ではありませんか?
最後に、これらは画像であり、配列の順序を維持できるようにする必要があります。それは可能ですか、それともロックを利用する必要がありますか? もしそうなら、numpy または multiprocessing から。
共有メモリ空間でマルチプロセッシングのnumpy配列を処理する方法を学ぼうとして、情報へのリンクを歓迎します。
PS 可能であれば numpy_sharedmem モジュールの使用を避けたいと思います。潜在的なユーザーの追加ダウンロード数を制限したいからです。