我目前正在使用 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 一样进行适当的核心固定?
非常感谢, 标记
最佳答案
如果 apply_async
调用的函数(例如 evalfunc
)很快完成,则池中的所有工作进程可能不会被利用。
如果这确实是您的情况,那么您需要将更多数据传递给对 evalfunc
的每次调用,以便每个进程都有更多需要处理的内容。
关于python多进程固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829351/