1

私は、大量の画像をバッチで読み取り (500 枚の画像としましょう)、それを numpy 配列に格納する python プログラムに取り組んでいます。

現在はシングル スレッドであり、IO は非常に高速です。多くの時間がかかる部分は、numpy 配列の作成とその上での処理です。

multiprocessing モジュールを使用することで、別のプロセスで配列を読み込んで作成することができます。しかし、メインスレッドがそれらのデータにアクセスできるようにするのに問題があります。

私が試してみました:

1: multiprocessing.queues の使用: 非常に遅いです。これは pickle と unpickle が多くの時間を浪費していると思います。大きな numpy 配列の酸洗いと酸洗い解除には、かなりの時間がかかります。

2: Manager.list() の使用: キューよりも高速ですが、メイン スレッドでアクセスしようとすると、それでも非常に低速です。リストを反復処理して何もしないだけでも、アイテムごとに 2 秒かかります。なぜそんなに時間がかかるのか理解できません。

助言がありますか ?ありがとう。

4

1 に答える 1

2

自分の質問に答えなければならないようです。

私が直面していた問題は、numpy で共有メモリを使用することで解決できました。

詳細については、次の URL を参照してください。

マルチプロセッシングのために共有メモリで numpy 配列を使用する

アイデアは基本的に、メイン プロセスで共有メモリを作成し、そのメモリを numpy 配列に割り当てることです。後で他のプロセスで、そこから読み取るか、書き込むことができます。

このアプローチは私にとって非常にうまく機能し、プログラムを 10 倍高速化します。

私は大量のデータを処理しており、ピクルス化は私にとって選択肢ではないためです。

最も重要なコードは次のとおりです。

shared_arr = mp.Array(ctypes.c_double, N)
arr = tonumpyarray(shared_arr)
于 2013-11-25T23:44:51.180 に答える