python中的进程、线程、协程


大家好,有时候会听到有人评价python编程执行效率方面相对java没有啥优势,其实是没有找到正确的打开方式,编程中无论是api还是执行脚本,无论是I/O密集型任务还是计算密集型任务,都有其提升执行效率的方式,通常,我们的优化手段就是并发编程,实现多任务同时执行,改善系统性能。
python中实现并发编程主要是依靠,进程、线程和协程,我们先来了解下三者的概念。
进程(process):是操作系统进行资源分配的基本单元,是CPU对程序的一次执行过程,每个进程都是独立的,有自己的内存空间、数据栈等。
线程(Thread):被包含在进程之中,是操作系统进行程序调度执行的最小单元。一个进程中至少有一个线程。
协程(Coroutine):比线程更小的执行单元,也被成为微线程。单个线程上执行多个任务,等待、切换执行任务,线程内切换没有切换开销,执行效率高。
下面我们来举个生活中的例子:
我们把生产工厂比作一个操作系统,一条生产线是一个进程,生产线上人就是一个线程,生产线上的工作就是需要完成的任务。如果我们想要提高生产的话。我们有下面几种办法:
第一种:增加生产线(相当于增加进程,多进程执行);
第二种:增加生产线上的人,提高生产(相当于增加线程,多线程执行);
第三种:生产线上总有做的快和慢的任务,会有一个等待的过程,那么,当出现任务等待的时候,可以先去做可以做的工作,待任务出现后再执行。充分里面劳动时间提升效率(任务等待、切换相当于使用协程完成任务);
从以上例子中我们就容易理解前面说的概念了。
接下来我们看一下,在python中的应用:
进程与多进程
python中依赖标准库mutiprocessing实现多进程任务,其中进程的常用方法:
多进程任务代码实例:
注意:上面进程的执行逻辑需要再run方法中实现,启动进程需要调用start方法,调用之后run方法便会执行。
线程与多线程
python依赖标准库Threading实现多线程,其中线程的常用方法有:
多线程实现实例:
执行结果:
python协程
协程的运行效率极高,切换完全由程序控制,不像进程和线程的切换需要花费系统的开销,并且协程不需要多线程的锁机制,因为只有一个线程。协程是微线程,对于计算密集型的任务都不太适用,但是对于I/O密集型的任务非常适用。如果遇到多核CPU且是计算密集型的任务,建议使用多进程+协程的方式,可以极大的提到性能。
我们一般通过asynio模块来实现协程及并发操作,代码实例如下:
需要注意的是:async和await这两个关键字只能在协程中使用;协程不能直接执行,需要在asyncio.run()中执行,也可以跟在await后面。
小结:为了提高执行效率,我们应该先分清任务类型。计算密集型任务更加适合多进程;I/O密集型任务适合多线程和协程;当然高并发下的最佳实践还是多进程+协程,可以极大提高执行效率,并且兼容了计算密集型任务和I/O密集型任务。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/288531.html

(0)
上一篇 2022年9月9日
下一篇 2022年9月9日

相关推荐

发表回复

登录后才能评论