进程是一个系统概念,也对应于CPU的底层硬件概念。
首先,可以查一下你的CPU可以支持几个线程:
from multiprocessing import cpu_count
print(cpu_count())
开启多进程的时候,最好不要接近或者超过CPU的硬件进程数。
from multiprocessing import Process
from time import sleep
def run(n):
sleep(n)
print(n)
if __name__ == '__main__':
p1 = Process(target=run, args=(1,))
p2 = Process(target=run, args=(2,))
p3 = Process(target=run, args=(3,))
p4 = Process(target=run, args=(4,))
p1.start()
p2.start()
p3.start()
p4.start()
多进程的启动还是非常方便的,启动指明目标函数名称和输入参数就行(这里注意后面有个逗号)。
多进程通过对CPU多核的巧妙利用,实现并行计算可从一定程度上达到加速程序的效果,看实验2:
from multiprocessing import Process
from time import time
def run():
start = time()
res = 0
for i in range(10000):
for j in range(10000):
res += 1
res -= 1
print('time cost:', time() - start)
if __name__ == '__main__':
t0 = time()
run()
p1 = Process(target=run, args=())
p2 = Process(target=run, args=())
p3 = Process(target=run, args=())
p4 = Process(target=run, args=())
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
print('all time cost:', time() - t0)
这个实验对比了未开启多进程和开启多进程的运行时间比较。输出为:
time cost: 3.343838691711426
time cost: 3.4023547172546387
time cost: 3.4059526920318604
time cost: 3.4068567752838135
time cost: 3.409113883972168
all time cost: 6.755127668380737
可以看到,用4个进程完成4次计算和未开启多进程完成1次计算的时间是几乎一样的。