我目前正在使用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一样进行正确的核心固定?
非常感谢, 标记
答案 0 :(得分:1)
如果apply_async
调用的函数(例如evalfunc
)很快完成,则可能无法使用池中的所有工作进程。
如果确实是您的情况,那么您需要将更多数据传递给evalfunc
的每次调用,以便每个进程都有更多可以咀嚼的内容。