多进程未能使用所有CPU
我需要在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'