2011-07-26 7 views
4

私は現在、単純な並列プログラミングを行うために、Pythonマルチプロセスを使用しています。 は私が8プロセッサまたは8つのコアのマシン上でこれを実行した場合、それは基本的に2つだけのコアを使用していますPythonマルチプロセス・ピンニング

def async(decorated): 
    module = getmodule(decorated) 
    decorated.__name__ += '_original' 
    setattr(module, decorated.__name__, decorated) 
    def send(*args, **opts): 
     return async.pool.apply_async(decorated, args, opts) 
    return send 

、その後

@async 
def evalfunc(uid, start, end): 
     veckernel(Posx, Posy, Posz, Quant, Delta) 
     return (uid, GridVal) 

def runit(outdir): 
    async.pool = Pool(8) 
    results = [] 
    for uid in range(8): 
     result = evalfunc(uid,Chunks[uid], Chunks[uid+1]) 
      results.append(result) 

非同期デコレータを使用しています。何故ですか? pthreadsのような適切なコアピン処理を行う方法はありますか?

どうもありがとう、 マーク

答えて

1

apply_async(例えばevalfunc)によって呼び出される関数の場合は、プール内のすべてのワーカープロセスが利用できない場合があり、非常に迅速に完了します。

これが実際の状況である場合は、evalfuncへの各呼び出しにさらに多くのデータを渡す必要があります。そのため、各プロセスで多くの問題が発生します。

関連する問題