Python のマルチプロセッシング ライブラリの Pool クラスを使用して、HPC クラスターで実行されるプログラムを作成しています。
これが私がやろうとしていることの抽象化です:
def myFunction(x):
# myObject is a global variable in this case
return myFunction2(x, myObject)
def myFunction2(x,myObject):
myObject.modify() # here I am calling some method that changes myObject
return myObject.f(x)
poolVar = Pool()
argsArray = [ARGS ARRAY GOES HERE]
output = poolVar.map(myFunction, argsArray)
関数 f(x) は *.so ファイルに含まれています。つまり、C 関数を呼び出しています。
私が抱えている問題は、プログラムを実行するたびに出力変数の値が異なることです (関数 myObject.f() は決定論的関数ですが)。(プロセスが 1 つしかない場合、プログラムを実行するたびに出力変数は同じになります。)
グローバル変数として保存するのではなく、オブジェクトを作成しようとしました:
def myFunction(x):
myObject = createObject()
return myFunction2(x, myObject)
ただし、私のプログラムでは、オブジェクトの作成にコストがかかるため、myObject を一度作成してから、myFunction2() を呼び出すたびに変更する方がはるかに簡単です。したがって、毎回オブジェクトを作成する必要はありません。
ヒントはありますか?私は並列プログラミングに非常に慣れていないので、これについてすべて間違っている可能性があります。シンプルなものから始めたかったので、Pool クラスを使用することにしました。しかし、私はそれを行うためのより良い方法を試してみたいと思っています.