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 に答える