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 か所に出力しました。
プロセス p
は square_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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn