1

我有一个昂贵的计算来拟合一些实验数据。拟合函数是特征模态的总和,每个特征模态都包含一个特定的曲面积分。因为如果你按照我认为线程化的经典方式来做它会相当慢。我正在使用python顺便说一句。

我要计算的函数类似于

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)不一样...

4

2 回答 2

1

试试看multiprocessing。这将使用类似线程的接口有效地创建单独的 Python 进程。但是,请确保您分析了您的计算并确保它是问题所在,而不是像 IO 之类的其他问题。启动过程非常缓慢,因此如果您打算使用它们,请将它们保留一段时间。

您也可以使用numpy这些功能。它们是用 C 代码编写的,所以它们很快就很愚蠢。检查他们两个,看看什么最适合。我会自己寻求numpy解决方案...

于 2013-09-14T17:10:40.787 回答
0

使用多处理池

import multiprocessing as mp

p = mp.Pool(10)

res = p.map(your_function, range(Mmin, Mmax))
于 2013-09-14T17:16:26.270 回答