我正在使用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)
Run Code Online (Sandbox Code Playgroud)
函数f(x)包含在*.so文件中,即它调用C函数.
我遇到的问题是每次运行程序时输出变量的值都不同(即使函数myObject.f()是确定性函数).(如果我只有一个进程,那么每次运行程序时输出变量都是相同的.)
我试过创建对象而不是将其存储为全局变量:
def myFunction(x):
myObject = createObject()
return myFunction2(x, myObject)
Run Code Online (Sandbox Code Playgroud)
但是,在我的程序中,对象创建很昂贵,因此,每次调用myFunction2()时,创建myObject一次然后修改它会容易得多.因此,我不想每次都创建对象.
你有什么建议吗?我是并行编程的新手,所以我可能会把这一切都搞错了.我决定使用Pool类,因为我想从简单的东西开始.但我愿意尝试更好的方法.