具有不同函数的python多处理
我无法为下一个任务找到合适的方法:具有不同函数的python多处理,python,multiprocessing,Python,Multiprocessing,我无法为下一个任务找到合适的方法: 我有一个输入massible[x1,x2,x3…xn]和函数,我想从massible f(xi,param)应用到每个x,所以这个param有八个可能的值,函数的结果不依赖于param。所以我需要同时为param的所有可能值运行这个函数f。哪一个函数和哪一个x一起工作绝对不重要。这对所有这八个函数f(xi,p1),f(xi,p2)都很重要。。。f(xi,p8)同时工作,所有的x将只被处理一次。似乎非常简单。我不知道你所说的“所有的x只会被处理一次”是什么意思,
我有一个输入massible[x1,x2,x3…xn]和函数,我想从massible f(xi,param)应用到每个x,所以这个param有八个可能的值,函数的结果不依赖于param。所以我需要同时为param的所有可能值运行这个函数f。哪一个函数和哪一个x一起工作绝对不重要。这对所有这八个函数f(xi,p1),f(xi,p2)都很重要。。。f(xi,p8)同时工作,所有的x将只被处理一次。似乎非常简单。我不知道你所说的“所有的x只会被处理一次”是什么意思,但这听起来是不可能的。对于每个参数,仍然必须单独调用该函数(除非某个黑色魔术师在SO上证明我错了,这似乎是可能的)
你为什么要把它包装成一个赤裸裸的尝试,除了?可能应该在我的帖子中提到,以捕捉他认为相关的任何错误,这只是为了我的例子赤裸裸。哎呀。如果您不关心错误,可以使用try/finally来确保池在之后关闭并停止。这不会按原样工作,因为您只是将参数传递给
f
,而不是x
列表。您可能需要映射部分(f,x)
或闭包。或者映射到((x,param)表示param中的param)
。
from multiprocessing import Pool
def f(x, param):
...do stuff...
if __name__ == '__main__':
params = [1,2,3,4,5,6,7,8]
try:
pool = Pool(8)
pool.starmap(f, [(x,param) for param in params])
except SomeError:
...do error stuff...
finally:
pool.close()
pool.join()