为什么我建议你用 Python 多进程?

优质文章,第一时间送达!

为什么我建议你用 Python 多进程?

文 | 饒木陽

Python 是运行在解释器中的语言,查找资料知道, python 中有一个全局锁( GI),在使用多进程( Threa)的情况下,不能发挥多核的优势。而使用多进程( Multiprocess),则可以发挥多核的优势真正地提高效率。

对比实验

资料显示,如果多线程的进程是 CPU 密集型的,那多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程;如果是 IO 密集型,多线程进程可以利用 IO 阻塞等待时的空闲时间执行其他线程,提升效率。所以我们根据实验对比不同场景的效率

为什么我建议你用 Python 多进程?

(1)引入所需要的模块

为什么我建议你用 Python 多进程?

(2)定义 CPU 密集的计算函数

为什么我建议你用 Python 多进程?

(3)定义 IO 密集的文件读写函数

为什么我建议你用 Python 多进程?

(4) 定义网络请求函数

为什么我建议你用 Python 多进程?

(5)测试线性执行 IO 密集操作、 CPU 密集操作所需时间、网络请求密集型操作所需时间

为什么我建议你用 Python 多进程?

输出

CPU 密集:95.6059999466、91.57099986076355 92.52800011634827、 99.96799993515015

IO 密集:24.25、21.76699995994568、21.769999980926514、22.060999870300293

网络请求密集型:4.519999980926514、8.563999891281128、4.371000051498413、4.522000074386597、14.671000003814697

(6)测试多线程并发执行 CPU 密集操作所需时间

为什么我建议你用 Python 多进程?

(7)测试多线程并发执行 IO 密集操作所需时间

为什么我建议你用 Python 多进程?

(8)测试多线程并发执行网络密集操作所需时间

为什么我建议你用 Python 多进程?

Output : 0.7419998645782471、0.3839998245239258、0.3900001049041748

(9)测试多进程并发执行 CPU 密集操作所需时间

为什么我建议你用 Python 多进程?

Output : 54.342000007629395、53.437999963760376

(10)测试多进程并发执行 IO 密集型操作

为什么我建议你用 Python 多进程?

Output : 12.509000062942505、13.059000015258789

(11)测试多进程并发执行 Http 请求密集型操作

为什么我建议你用 Python 多进程?

Output : 0.5329999923706055、0.4760000705718994

实验结果

CPU 密集型操作 IO 密集型操作网络请求密集型操作

为什么我建议你用 Python 多进程?

通过上面的结果,我们可以看到:

多线程在 IO 密集型的操作下似乎也没有很大的优势(也许 IO 操作的任务再繁重一些就能体现出优势),在 CPU 密集型的操作下明显地比单线程线性执行性能更差,但是对于网络请求这种忙等阻塞线程的操作,多线程的优势便非常显著了

多进程无论是在 CPU 密集型还是 IO 密集型以及网络请求密集型(经常发生线程阻塞的操作)中,都能体现出性能的优势。不过在类似网络请求密集型的操作上,与多线程相差无几,但却更占用 CPU 等资源,所以对于这种情况下,我们可以选择多线程来执行。

为什么我建议你用 Python 多进程?

好文章,我在看❤️


分享到:


相關文章: