多进程未能使用所有CPU

-2 投票
1 回答
2614 浏览
提问于 2025-04-19 10:14

我需要在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个循环(彼此独立)并行运行,因为我有12个核心的CPU。我看了一些资料,所以在开始时也加了Process.init(self),但还是没有提升CPU的性能……希望能得到一些建议。

1 个回答

1

这完全取决于你在并行处理时做的事情。如果这些处理不是很耗费CPU的任务,或者它们都在访问同一个资源(比如说,写入同一个硬盘),那么你从多进程中获得的好处就有限。

这段代码使用了我电脑上的所有核心:

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'

撰写回答