![e3c2fb0f58b480a22db3d2501d611aab.png](https://img-blog.csdnimg.cn/img_convert/e3c2fb0f58b480a22db3d2501d611aab.png)
上一期我们讲了python中多线程的使用,忘记的小伙伴请戳链接复习,https://zhuanlan.zhihu.com/p/262638052。
还记得我们说到,多线程并不是真正的并发,只是充分利用了等待时间,所以当遇到CPU密集型的任务时,多线程就力不从心了,这时候要请出本文的主角多进程。
多进程的使用方法和上一期多线程极为相似,实际上在multiprocessing库中多线程只是在多进程的基础上多封装了一层,话不多说,直接上代码。
# 定义一个CPU密集的计算任务,重复做50万次运算
看看打印的输出结果,在单进程模式下,每次都在同一个进程ID下运行,耗时21秒
Run task 0, pid 3820
Task 0 finished, cost 3.78 seconds.
Run task 1, pid 3820
Task 1 finished, cost 3.55 seconds.
Run task 2, pid 3820
Task 2 finished, cost 3.53 seconds.
Run task 3, pid 3820
Task 3 finished, cost 3.58 seconds.
Run task 4, pid 3820
Task 4 finished, cost 3.42 seconds.
Run task 5, pid 3820
Task 5 finished, cost 3.53 seconds.
Normal: 21.383224725723267
在多进程模式下,由于我们在程序中设置了开启4个进程,可以看到6个计算任务在最开始只同时开始了4个,并且是位于不同的进程ID下,只有当某个任务运行结束,才会补上下一个任务,最多不超过4个。在多进程模式下,总耗时9s。值得注意的是,多进程是极为消耗计算机资源的,读者可以尝试在运行时,检查计算机的CPU利用率,会发现有了几倍的飙升,因此使用多进程模式一定要结合实际情况量力而行。
Run task 0, pid 12240
Run task 1, pid 16864
Run task 2, pid 15436
Run task 3, pid 17808
Task 3 finished, cost 4.61 seconds.
Run task 4, pid 17808
Task 1 finished, cost 4.66 seconds.
Run task 5, pid 16864
Task 2 finished, cost 4.74 seconds.
Task 0 finished, cost 4.79 seconds.
Task 4 finished, cost 4.04 seconds.
Task 5 finished, cost 4.06 seconds.
Pool: 9.227919340133667
由于有了上一期的基础,本文快速地综述了python中多进程最基础的部分,能力有效,如有谬误请不吝指出。