我必须使用一个不同的参数运行相同的进程大约一百次,我想在具有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()
)?
谢谢!