我正在使用 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() 是确定性函数)。(如果我只有一个进程,那么每次运行程序时输出变量都是相同的。)
我尝试创建对象而不是将其存储为全局变量:
def myFunction(x):
myObject = createObject()
return myFunction2(x, myObject)
然而,在我的程序中,对象的创建是昂贵的,因此,创建一次 myObject 然后在每次调用 myFunction2() 时修改它要容易得多。因此,我不想每次都创建对象。
你有什么建议吗?我对并行编程很陌生,所以我可能会做错这一切。我决定使用 Pool 类,因为我想从简单的东西开始。但我愿意尝试更好的方法。