我需要进行昂贵的计算来拟合一些实验数据。拟合函数是本征模的和,每个都包含特定的表面积分。因为如果你这样做是相当慢的,我想到了它的经典方式。我正在使用python btw。
我想要计算的功能类似于
def fit_func(params , Mmin, Mmax):
values = np.zeros(1000)
for m in range(Mmin, Mmax):
# Fancy Calculation for each mode
# some calulation with all modes, adding them up 'values'
return values
我怎么能把它分开?我做了类似
的事情data1 = thread.start_new_thread(fit_func, (params,0,13))
data2 = thread.start_new_thread(fit_func, (params,13,25))
但是data1和data2的总和与fitfunc(params,0,25)不一样......
答案 0 :(得分:1)
试试multiprocessing
。这将使用类似线程的接口有效地创建单独的Python进程。但是,请确保您分析计算并确保它是问题,而不是像IO那样的其他问题。启动过程非常缓慢,如果您打算使用它们,请将它们保留一段时间。
您也可以将numpy
用于这些功能。它们是用C代码编写的,所以它们很快就很愚蠢。检查它们,看看哪种最合适。我会自己去寻找numpy
解决方案......
答案 1 :(得分:0)
使用多处理池
import multiprocessing as mp
p = mp.Pool(10)
res = p.map(your_function, range(Mmin, Mmax))