ホームページ > バックエンド開発 > Python チュートリアル > Python マルチプロセッシングで大規模な読み取り専用データを効率的に共有するにはどうすればよいですか?

Python マルチプロセッシングで大規模な読み取り専用データを効率的に共有するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-24 18:45:50
オリジナル
794 人が閲覧しました

How to Share Large Readonly Data Efficiently in Python Multiprocessing?

マルチプロセッシングでの共有読み取り専用データの維持

質問:

Python マルチプロセッシング環境では、コピーを作成せずに、大きな読み取り専用配列 (例: 3 Gb) を複数のプロセス間で確実に共有するにはどうすればよいですか?

回答:

マルチプロセッシング モジュールと NumPy を併用すると、プロセス間でデータを効率的に共有できます。

<code class="python">import multiprocessing
import ctypes
import numpy as np

shared_array_base = multiprocessing.Array(ctypes.c_double, 10*10)
shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
shared_array = shared_array.reshape(10, 10)</code>
ログイン後にコピー

このアプローチは、Linux が fork() にコピーオンライト セマンティクスを採用しているという事実を活用し、データが重複する場合にのみ複製されるようにします。変更されました。その結果、明示的に multiprocessing.Array を使用しなくても、変更されない限り、データはプロセス間で効果的に共有されます。

<code class="python"># Parallel processing
def my_func(i, def_param=shared_array):
    shared_array[i,:] = i

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=4)
    pool.map(my_func, range(10))

    print(shared_array)</code>
ログイン後にコピー

このコードは共有配列を同時に変更し、複数のプロセス間でデータが正常に共有されることを示します。

[[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
 [ 2.  2.  2.  2.  2.  2.  2.  2.  2.  2.]
 [ 3.  3.  3.  3.  3.  3.  3.  3.  3.  3.]
 [ 4.  4.  4.  4.  4.  4.  4.  4.  4.  4.]
 [ 5.  5.  5.  5.  5.  5.  5.  5.  5.  5.]
 [ 6.  6.  6.  6.  6.  6.  6.  6.  6.  6.]
 [ 7.  7.  7.  7.  7.  7.  7.  7.  7.  7.]
 [ 8.  8.  8.  8.  8.  8.  8.  8.  8.  8.]
 [ 9.  9.  9.  9.  9.  9.  9.  9.  9.  9.]]
ログイン後にコピー

共有メモリとコピーオンライト セマンティクスを活用することで、このアプローチは、マルチプロセッシング環境のプロセス間で大量の読み取り専用データを共有するための効率的なソリューションを提供します。

以上がPython マルチプロセッシングで大規模な読み取り専用データを効率的に共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート