2011-07-26 45 views
4

我目前使用python多進程來做一些簡單的並行編程。 我使用一個異步裝飾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) 

如果我它基本上僅使用兩個核的8個處理器或8個內核機器上運行此。這是爲什麼?有沒有辦法像pthreads一樣進行適當的核心固定?

非常感謝, 馬克

回答

1

如果該功能被apply_async(例如evalfunc)叫完速度非常快,然後在池中的所有工作進程,可以不使用。

如果這確實是您的情況,那麼您需要將更多數據傳遞給evalfunc的每個調用,以便每個進程都有更多的咀嚼。