多处理不要使用所有的CPU

时间:2014-09-02 15:42:43

标签: python multiprocessing

我需要在python中进行并行化,我将使用多处理,因为我遇到了一个困难, 我做了7个流程并启动它,但我的cpu没有完全表现..为什么? 它没有显示任何错误,但它运行缓慢,CPU性能不上电.. 请给出一些建议。感谢

 p1 =  Process(target=TestFor1,args = ())
 p2 =  Process(target=TestFor2,args = ())
 p3 =  Process(target=TestFor3,args = ())
 p4 =  Process(target=TestFor4,args = ())
 p5 =  Process(target=TestFor5,args = ())
 p6 =  Process(target=TestFor6,args = ())
 p7 =  Process(target=TestFor7,args = ())
 p1.start()
 p2.start()
 p3.start()
 p4.start()
 p5.start()
 p6.start()
 p7.start()

 p1.join()
 p2.join()
 p3.join()
 p4.join()
 p5.join()
 p6.join()
 p7.join()

这个TestFor1 - 7,我做了七个不同的功能,它有个别的循环。 我想运行这7个for循环(独立)并行,因为我有12个核心cpu 我读了一些东西,所以我在开始的时候也放了Process。 init (self)但是它仍然没有给cpu加电..建议欣赏

1 个答案:

答案 0 :(得分:0)

这一切都取决于你在做什么并行流程。如果他们没有进行cpu密集型任务或者都在访问相同的媒体(例如,写入同一个磁盘),那么你只能从mp中获得这么多。

这使用了我机器上的所有核心:

import multiprocessing

def func():
    for i in xrange(10000000):
       sum(range(100)) 

procs = []
for i in xrange(multiprocessing.cpu_count()):
    p = multiprocessing.Process(target=func)
    p.start()
    procs.append(p)

print 'started', len(procs), 'processes'

for p in procs:
    p.join()
    print 'process done'

print 'all done'