Python:用线程分割总和

时间:2013-09-14 16:44:33

标签: python multithreading

我需要进行昂贵的计算来拟合一些实验数据。拟合函数是本征模的和,每个都包含特定的表面积分。因为如果你这样做是相当慢的,我想到了它的经典方式。我正在使用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)不一样......

2 个答案:

答案 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))