Pythonのマルチプロセスでどのようにデータを共有するか

Python のマルチプロセス間では、次の方法でデータを共有できます。

  1. マルチプロセッシングにおける共有変数
  2. マルチプロセッシングアレイ
from multiprocessing import Process, Value, Array

def update_value(v):
    v.value += 1

def update_array(a):
    for i in range(len(a)):
        a[i] += 1

if __name__ == '__main__':
    v = Value('i', 0)
    a = Array('i', [0, 1, 2, 3, 4])

    p1 = Process(target=update_value, args=(v,))
    p2 = Process(target=update_array, args=(a,))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

    print(v.value)  # 输出: 1
    print(a[:])  # 输出: [1, 2, 3, 4, 5]
  1. マルチプロセッシングパイプ
from multiprocessing import Process, Pipe

def send_data(conn):
    conn.send("Hello from child process!")

def receive_data(conn):
    data = conn.recv()
    print(data)

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()

    p1 = Process(target=send_data, args=(child_conn,))
    p2 = Process(target=receive_data, args=(parent_conn,))

    p1.start()
    p2.start()

    p1.join()
    p2.join()
  1. マルチプロセッシングキュー
from multiprocessing import Process, Queue

def send_data(q):
    q.put("Hello from child process!")

def receive_data(q):
    data = q.get()
    print(data)

if __name__ == '__main__':
    q = Queue()

    p1 = Process(target=send_data, args=(q,))
    p2 = Process(target=receive_data, args=(q,))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

マルチプロセスは独立している点に注意し、データの共有は上記の方法により明示的に行う必要があります。また、特殊なデータ型(辞書や集合など)には、共有オブジェクトを作成するためにmultiprocessing.Managerを使用する必要があります。

bannerAds