使用多处理限制核心数。进程

时间:2014-04-09 17:08:20

标签: python multiprocessing

我必须使用一个不同的参数运行相同的进程大约一百次,我想在具有16个内核的计算机上使用multiprocessing.Process()运行它但我只想使用4个内核(因为计算机是共享的)和其他人)。我试图避免multiprocessing.map(),因为我必须将几个参数传递给被调用的函数,所以我必须创建元组,依此类推。我可能还希望在进程之间进行通信并在将来传递参数,因此Process()Queue()的组合似乎是正确的选择。所以这是一个非常简单的例子:

import multiprocessing

def run(mass, input_unit, unit):
    if input_unit == 'kg':
        if unit == 'kg':
            return mass
        elif unit == 'g':
            return 1e3 * mass
    elif input_unit == 'g':
        if unit == 'kg':
            return 1e3 * mass
        elif unit == 'g':
            return mass
return

p = []
for i in xrange(100):
    p.append(multiprocessing.Process(target=run, args=(i,'kg','g'), name=i))
    p[i].start()
for pi in p:
    pi.join()

(实际上我向run()传递了更多的参数,因此map()不是很方便。我已经读过这个号码应该通过调用来限制

queue = multiprocessing.Queue(Nproc)

并将队列传递给Process(),但这似乎也不起作用。发生的事情是,有100个进程同时运行(或至少16个,其余的等待运行,但所有100个进程都显示在top

有没有办法告诉Process()使用不超过N内核并在其中一个内核完成后立即启动一个进程,而不必等待其他三个(这将发生在p.join())?

谢谢!

0 个答案:

没有答案