今天我们来聊聊Python里面的多进程与多线程编程模式。
01 多线程工作
在开始讲今天的正文之前,先给大家介绍一个概念「多线程工作」,这个概念可能有的人听过,也可能有的人平常工作中就是这么做的。我再来给大家讲讲这个概念,所谓的「多线程工作」就是同时做好几件事情。
拿我个人工作中例子来说,当我用Sql跑数的时候,数据不可能一下子就导出来,我会在一个屏幕上显示Sql运行进度,在另一个屏幕上先做一会PPT,等Sql跑出来以后,我就又会迅速切换到处理刚刚导出来的数据。有的时候数据量很大,用Excel打开文件可能需要几分钟的时间,这个时候Excel是处于运行状态,我是没法在Excel上做别的事情,我会去微信上去处理别人的一些问题,当文件打开以后,我会迅速切换到Excel上继续下一步处理,当我输入一个公式以后,Excel可能又需要等待一会,这个时候我就可以再去做一些别的事情。
大家可以看到,我没有在等一件事情彻底做完以后再去做另一件事情,而是在不同事情之间迅速切换,这种工作方式就可以算是一种「多线程工作」。
「多线程工作」可以减少你等待的时间,大大提高你的工作效率。
02 多进程与多线程
了解了「多线程工作」以后,我们开始进入今天的正题,编程里面的多线程和多进程。在上面的例子中Sql跑数可以算是一个进程、做PPT也可以算是一个进程、Excel处理数据还是一个进程。
进程下面还有一个更小的单位就是线程,一个进程由若干个线程组成,Sql跑数这个进程可以由写Sql、运行Sql、导出数据这几个线程组成。同样,PPT制作这个进程可以由明确主题、选模板、列大纲、丰富页面这几个线程组成。
线程是程序执行的最小单位,一个进程可以由一个或多个线程组成,各个线程之间也是交叉执行。
这里需要注意的是,多进程/多线程并不能做到同时去做好几件事情,而是把不同的事情交叉着做,做一段时间任务a,然后强制停止,去做一会任务b,再停止,再去做任务c。之所以会觉得各个任务之间是同时进行的原因是是任务与任务之间切换速度足够快,这样看起来就像是多个任务同时在进行。
我们再来看两个概念:并行:指在同一时刻,有多条指令在多个处理器上同时执行;
并发:指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。
多份工作有多个人同时在做时就是并行,当多份工作由一个人交替在做时就是并发。在计算机中也是同样的概念,计算机中CPU的核数就相当于人数,当计算机是单核多任务时就是并发;当计算机是多核且大于任务数时,就是并行。
目前电脑主流配置都是四核/八线程的,而实际