Python マルチプロセッシング共有オブジェクト

Zeeshan Afridi 2023年6月21日
  1. マルチプロセッシングでの Python 共有メモリ オブジェクトの使用
  2. まとめ
Python マルチプロセッシング共有オブジェクト

Python では、共有メモリ マルチプロセッシングは複数のプロセッサを接続することで構成されますが、これらのプロセッサはシステムのメイン メモリに直接アクセスできる必要があります。 これにより、接続されているすべてのプロセッサが、使用または作成した他のプロセッサ データにアクセスできるようになります。

マルチプロセッシングでの Python 共有メモリ オブジェクトの使用

Python でマルチプロセッシングを使用すると、新しいプロセスを独立して実行し、独自のメモリ空間を持つことができます。 以下の例を見て、Python を使用した共有オブジェクトのマルチプロセッシングを詳細に理解しましょう。

コード例:

import multiprocessing

# an empty array globally declared
answer = []


def square_numbers(mynumbers):

    # for squaring array elements, a function has been used

    global answer
    # appending square numbers to a global array
    for n in mynumbers:
        answer.append(n * n)
    # print a global array for generating an answer
    print("Answer using first process: {}".format(answer))


if __name__ == "__main__":
    # input array
    mynumbers = [5, 10, 15]

    # new process has been created
    p = multiprocessing.Process(target=square_numbers, args=(mynumbers,))
    # process begins here
    p.start()
    # wait unless a process is completed
    p.join()

    # print a global array for generating an answer
    print("Answer using main program: {}".format(answer))

出力:

Answer using first process: [25, 100, 225]
Answer using main program: []

上記の例を使用して、グローバル配列の回答を 2 か所に出力しました。

プロセス psquare_numbers 関数と呼ばれるため、メモリ空間内のプロセス p の配列要素が変更されます。

プロセス p が完了した後にメイン プログラムが実行され、メモリ空間で空の配列が応答として取得されます。

Python のマルチプロセッシングは、複数のプロセス間でデータを共有するための値オブジェクトと配列を提供します。

コード例:

import multiprocessing


def square_data(mydata, answer, square_sum):
    # a function has been made for squaring of given data

    # appending squares of mydata to the given array
    for ix, n in enumerate(mydata):
        answer[ix] = n * n

    # sum the square values
    square_sum.value = sum(answer)

    # print array of squared values for process p
    print("Answer in process p: {}".format(answer[:]))

    # print the sum of squared values for process p
    print("Sum of squares values in process p: {}".format(square_sum.value))


if __name__ == "__main__":
    # here, we input the data
    mydata = [1, 2, 3]

    # an array has been created for the int data type for three integers
    answer = multiprocessing.Array("i", 3)

    # value has been created for int data type
    square_sum = multiprocessing.Value("i")

    # new process has been created
    p = multiprocessing.Process(target=square_data, args=(mydata, answer, square_sum))

    # process begins from here
    p.start()

    # wait unless the process is completed
    p.join()

    # print an array of squared values for the main program
    print("Answer in main program: {}".format(answer[:]))

    # print the sum of squared values for the main program
    print("Sum of square values in main program: {}".format(square_sum.value))

出力:

Answer in process p: [1, 4, 9]
Sum of squares in process p: 14
Answer in main program: [1, 4, 9]
Sum of squares in main program: 14

上記の例では、配列を作成し、それに 3つの整数を渡しました。 二乗値の配列を出力し、次にプロセス p の二乗値の合計を出力しました。

この後、メイン プログラムの 2 乗値の配列と 2 乗値の合計を再び出力しました。

まとめ

Python を使用して共有メモリ マルチプロセッシングを説明するには、いくつかの方法があります。 そのため、この記事では、オブジェクトを共有メモリ空間に配置して独立して実行する方法について、マルチプロセッシング共有メモリの概念について説明しました。

これとは別に、Python ではプロセスがさまざまなプロセス間でデータを共有できることも学びました。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Multiprocessing