python多进程固定

时间:2011-07-26 11:32:08

标签: python concurrency numpy multiprocessing

我目前正在使用python multiprocess来做一些简单的并行编程。 我使用异步装饰器

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 个答案:

答案 0 :(得分:1)

如果apply_async调用的函数(例如evalfunc)很快完成,则可能无法使用池中的所有工作进程。

如果确实是您的情况,那么您需要将更多数据传递给evalfunc的每次调用,以便每个进程都有更多可以咀嚼的内容。