00:00
Hello,各位小伙伴,那么在前面的课程当中呢,给大家去讲解了一下,关于我们这个啊爬虫的一些分页数据的一个获取,包括这个代理IP,那么接下来呢,这节课呢,我们给大家再介绍一些这个关于啊进程与线程啊,那么在讲解我们拍Y摄的进程与线程之前呢,我们先给大家呢简单介绍一下呃进程与线程的内容啊,防止我们有有好多小伙伴呢,可能对这个进程和线程叭较迷哈,那我们来看一下啊这个进程和线程呢,它首先呢是我们操作系统中的一个基本概念啊,但是呢,他们比较抽象,不太好容易理解哈,呃,所以呢,最近我读到了一篇文章啊,然后呢,有一个比较不错的这个呃,一个类比哈,那这个原文档的这个材料呢,我也放在这里,感兴趣的小伙伴呢,回头可以这个去看一下啊,那我们来看一下,它这里边有一个例子,就是说,呃,计算机的这个核心是什么,计算机的核心呢,是一个CPU,那么它承担了所有计算机的任务啊,就像是一套工厂一样啊,随时都在这个运作,也就是说我们计算机它其实那个脱离的CP,就它的核心就是CPU,脱离了CPU之后是没有办法做任何操作的,对吧?啊,所以就是也就是说你在工厂当中所有做的任何计算呀,啊,所有的工作哈,都。
01:00
需要我们的CPU来执行啊,这个是一定的,对吧?好,那么接下来看这样啊,就是假设啊,我们工厂的这个电力有限,那么一次只能给一个车间提供这个电力,也就是说一个车间开工的时候,那么其他的车间都必须停工,那么这个背后的含义是什么?就是单核CPU一次只能运行一个任务,也就是说。我们早期的这个CPU啊,都是单核的哈,单核的CPU那么一次只能运行一个任务,也就是说他在运行这个任务的时候,别的任务都得停掉,都必须停掉,那么为什么说那呃有人说我感觉不到啊,你看我可以在用电脑做这个任务的同时,在做另外的任务,对不对?实际上是什么呢?是我们这个计算机它的运行,呃,这个处理的速度比较快,所以呢,他会来回切换,也就是说他一会儿干干这个活,一会儿干干那个活,然后之间切换的速度非常快,所以你是感觉不到的啊,就这样的一个情况,所以这个呢,呃,就是我们这个单个CPU,也就是说他一次只能直接运行一个任务,但是它可以切换啊,切换任务啊,好,那么呃,进程呢,那么这个我们计算机当中进程就好比上次这个工厂当中的车间,它代表CPU所能处理的单个任务,也就是说我们开启一个程序之后,就会开启一个进程啊,就我们启动了一个任务,它就启动一个这个进程,那么这个进程呢,CPU就要来帮我们运行,但是不管任何时候啊,CPU它只能运行一个进程,那么其他的进程是属于非运行状态,举个例子,比如说我们电脑这边要做运算,那边要听歌,这边放视频哈,它其实同时只能做一件,就是单核CPU话,它一次只能做一件事情。
02:17
它只不过在这三个视频或多个任务之间来回给你切换,所以这个时候呢,你感觉到啊,感觉到是呃是是同时的,其实不是啊,也不是,所以这个进程比较理解好啊,当然了,那有一些,嗯,比如说我们现在是双核或四核的这个CPU的话,那么它可以同时执行的任务有几个呢?有四个。它可以同时执行四个任务啊,然后那也就是说它可以同时执行四个进程,当然有有好多项不止啊,其实我们原来在早期单口的时候,我们的进程数远远都不止四个了,那这个时候呢,就是呃这个那个怎么处理呢?因为还是那句话,它资金切换的速度比较快,所以你几乎感觉不到,那么四核的话,它的这个运行速度就会更加高效啊,更加高效,所以它的处理速度会快嘛啊,所以这个就是我们的这个叫单核CPU与多核CPU,包括进程,进程就是比如说我们呃双击一个QQ,这就开启了一个进程啊,至少要开启一个啊,那么双击的一个,比如说呃,打开了一个360浏览器,那么它至少也要开启一个进程,当是它可以开启多个进程啊,可以开启多个,但是至少有一个进程啊,必须要启动,也就是说一个任务至少要占一个进程啊,一个进程啊,那么什么是这个,这个就属于我们进场啊,那么接下来就是,呃,看一下这里边有个案例,他说一个车间里边可以有很多工,很多的工人,他们共同来完成一件事啊,你大家看一下啊,这个车间里边有很多工人,对吧?那么这个线程就好比是我们车间里边的功能,一个进程可以包含多个线程,举个例子,我们有浏览器,打开我们的网站的时候,启动这个浏览器,不管是什么类型的浏览器啊,你只要启。
03:34
从浏览器就等于开至少开启了一个进程,那么接下来浏览器里边你是不是可以同时浏览多个页面呢?对吧?上面打开一个这个页面,然后再打开一个新的table乐,对不对?那么这样的话其实就是多个任务,那么这个多个任务它怎么实现呢?它可以创建多个线程,多个线程那么首先注意哈,不管你这个谷歌浏览器打开之后有没有执行任务,它一个进程里面至少要有一个县城,也就是说一个车间里面至少要有一名工人,他还可以有多名工人来共同的去做一些事情啊,就这个概念,好,那么接下来呢,就是说车间里边的,呃,车间的这个空间是所有的工人,呃,工人们都共享的,比如说比如许多房间是每个工人都可以进出的,这象征一个进程中的内存是共享的,比就说在这个房间里面呢,啊,这个工作的人们啊,都是可以共享这个房间里面的所有的一些啊信息和内容的啊,所以就是说当我们开启了一个进程的时候,进程中至少要创建一个线程,它同时还可以创建多个线程,那么这多个线程当中其实是共用的这一个进程的,也是这一个房间中的啊所有信息和内容,好那么接下来。
04:32
啊看一下,可是呢,每个房间的大小不一样,有些房间呢,最多只能容加一个人,比如说厕所对吧,里面有有这个有人的时候,其他人就不能进去了,这代表一个线程在使用某些共享内存时啊,其他县程必须等待它结束才能使用这块内存,也就是说我们堵水的,比如说这个房间里就一个水杯的啊一个水杯,那么四个人怎么喝水呢?四个人好,我喝水的时候别人就得等着,那么我喝完水之候,别人再来,再来,就这样的一个意思啊对这个厕所也是一个概念啊,就是呃,如果只有一个厕所的话,那么呃,其他人就必须只能等待啊,就这样的一个概念啊啊等他出来以后才能去,好,那么呃,一个防止他人进入啊的简单办法,也就是说正常情况下,你你这个厕所里边,你这个进去以后,别人在外边着急,他一推门进去,一推门,你弄得很尴尬对不对,这个时候怎么办呢?诶这个时候就是防止别人进来啊,有人的时候防止别人进去怎么办呢?就加一把锁啊加一把锁,所以就先到人锁上门,然后后面的人看到这个锁就在门口排队,那么等锁打开之后再进去啊,那么这个就叫互斥锁啊,互斥锁呃,什么意思呢?就是防止多个线程同时读写某一块内存的这个啊区域,也就是说呃,三个人。
05:32
同时进一个厕所,这显然不太合理是吧?对吧?减肥到了要对吧?嗯,这显然不合理啊,好,所以那么呃,那么这个就是叫做互斥所啊好,接下来还有一些房间,那么可以同时能容纳N个人,比如说厨房,也就是说如果人数大于N多,出来的人只能在外面等着,就好比某些内存区域只能提供给固定的送用的线程使用啊,那么接下来最后啊解决这时的一个解决方案就是在门口挂N把锁,进去的人取一把钥匙,出来的时候再把钥匙挂回去,到后来的人发现钥匙啊,钥匙架空了,就知道必须在门口排队了,这种做法叫做信号量啊,用来保证多个线程不会冲突,呃,不知道这个各位小伙伴们有没有听说过。
06:06
咱们中国比较啊,在咱们国内上出现了一件事情,就是比较出名的那个叫做优衣库事件啊,优衣库事件好优衣库呢是这样的啊,它的试衣间在门口,首先第一呃,第一个事儿就是你一个人只能去拿五件衣服进去试衣服啊,这是第一个,第二个呢,就是他们可能有五六间或者是七八间这个试衣间,那么试衣间每个都会给你个门牌号啊,门牌号你进去以后找到对应的房间进去就可以了,好当这个架子上的,当这个架子上的这个门牌号已经没有的时候,就证明所有人都要在外面排队啊,这个就跟我们啊刚才讲的这个案例是一样的啊,也就是说啊,这个时候就是呃,信号量,通过一个信号量来进行一个处理好,所以呢,就是当我这个外面的这个门号被拿光的时候呢,啊,里面的人就不能就外面的人就不能在这个进入了啊,就那样一个状态,就说虽然我有多个地方,虽然我有多个房间啊,那么这个时候呢,就只能是,呃,只能是什么呢?只能是这个,呃,但是每个房间都有,都有人占用的话,那你只能是在外,在外面继续等待啊,继续等待这样的一个情况啊好,呃,那么接下来就是操作系统的一个设计,因此可以归纳为三点,第一个是以多进程形式,允许多个任务同时进行,也就是说首先多进程指的就是多个。
07:06
啊,那么以多线程形式允许单个任务分成不同的部分运行,也就是说是这样的。多线程,一个进程里面至少要有一个线程啊,至少要有一个主线程,然后呢,一个进程里边它可以有多个线程,这样的话,它这个任务啊可以分成不同的部分来进行运行,这样的话速度就很啊就提高了很多,然后第三个提供协调机机制,一方面啊防止进程和呃和线程之间产生冲突,另一方面允许进程和线程之间共享一些资源啊,这是协调机制,也就说这就是我们计算机当中的一些进程和线程啊,不知道个小伙伴理解了没有啊呃,如果大家还是不太好理解的话,我可以给你简单举一个例子啊,比如说我给你安排一件活,这个活就是一个进程一个进程啊呃,或者这样吧,我们公司啊,在公司里边上班的话,可以理解为一个公司的部门啊,一个部门就是一个进程,那么大家想一想,这个进程啊,就指的是一个工作的部门啊,那么请问这个部门里边没有人能行吗?肯定不行,所以他至少要有一个人,哪怕只有一个人对不对也可以啊,但是呢,这一个部门里边如果任务比较多的话,一个人忙不过来,所以怎么办呢?啊,所以在这个部门里边给他多招几个人,多招几个人,这这些人都是现场,然后共同来为这个部门的事情进行进行一些处理啊,那这个就是我们刚才所说的啊,所说的这个。
08:12
进程与线程的这个区别啊,这是我们对这个计算机当中的啊进程与线程的区别和理解,当然各位小伙伴如果还有一些不不太理解的话呢,那也可以到我给你提供的这个原文档的材料地址里面呢,再去更呃,抽时间的话可以更加详细的去了解一下哈,好了,这是进程与线程的一个区别哈,那么接下来我们看一下就是在我们Python当中如何去啊实现这个叫多进程或多线程的一个啊这个操作哈,那么这里呢,给大家去讲解一下进程与线程的一个基本实现。我看一下,呃,这样吧,我们下节课啊下节课这个这节课我们就先简单给大家普及一下啊,关于进程与呃线程的一些内容,呃,我直接给大家练了吧,好吧啊直接练样练了吧,啊直接在这个课程里边练吧,因为我怕这个每一节课的时间太长啊,各位小伙伴看起来可能会比较枯燥啊,但是我一天讲讲到这儿了再停下来不太好是吧,嗯,哎,我自己有时候很容易纠纠结啊,强迫啊,那么来看一下啊八童进阶啊八童进阶我们的这个叫啊进程进程与叫进程与进从。
09:10
与线程与线程啊基本实现啊,基本实现好,来我们看一下啊,首先啊,首先的话就是呃这个呃看一下我们这个Python当中啊,Python当中这个有有一个这个它有一个模块,专门是呃负责这个竞争处理啊举个例子啊,我们在这里来先看一下啊,先看一下,比如说我这里有一份工作啊,有一份工作啊deff等于work啊work好这个工作里呢,是那样的啊,就是这是一个工作的部门,然后呢,呃这个里边呢,需要给一个人打电话,比如说啊给谁打电话啊给这个啊给给这个。打什么打这个这个电话打。啊,打这个销咨询咨询电话,打电话啊,打销售咨询吧。打销售电话,销售,嗯,销售电话啊,给谁打呢?给这个传进来的这个N,给这个N打啊来。
10:06
那么这个电话一般要打多久呢?可能打个。几分钟啊,只能打个几分钟啊,然后我这里呢,这么写,导入我们的time模块,然后在这里边呢,让他睡一会啊time点呃time.sleep啊sleep让他执行一会啊利普,比如说打个几秒呢,这个一般电话至少要打三秒嘛,对不对啊然后呢,接下来呢,是这样的啊在下边就是啊给自己打电话啊这个呃叫什么销售电话结束,销售电话啊结束啊销售电话结束。结束。结结束啊,谁的这个销售电话呢?啊给谁啊,销售电话结束,这是谁的啊,这谁的,我们这里标记一下,画括号。呃,这个报括号,嗯,然后前面传个F进来啊好,这是我们的一个,呃,比如说我们的一个工作内容啊,工作内容现在是这样的啊,现在是假设啊,假设我们现在有这么几个人啊,需要做一个操作,就说比如说我们这个有一个用户啊,用户里表user list,然后呢,等于我们中国号,比如说给谁呢?给这个刘德,刘德华是吧,给刘德华张学友,然后还有给谁刘德华张学友,还有还还有什么,还有梁朝伟是吧,梁朝伟。
11:16
梁朝伟。啊,然后呢,给这三个人打电话,举个例子啊,假设给这三个人打电话的话,那怎么办呢?For in,我们当前的user list。It话个内容,诶,Work,我这里写错了吗?Wo。OK啊好,这样的话给他传进去啊,来优先运行一下,看那来看一下我们这个程序运行看那正常情况下我们要先给比如说刘德华打销售电话,销售电话结束以后,哎,挂了之后再给张有打,张朝伟打完电话挂了之后再给梁朝伟打啊梁朝伟结束以后啊,这个程序就结束了,对不对,也就是说假设啊,假设这就属于叫什么啊单线程,这个叫单线程的情况下啊,单进程单进程。
12:05
三进程与。你单线程单线程都这样了,就是说这个时候实际上是启动了一个进程啊,启动,比如说启动了一个启动拉一个一个进程,一个进程啊,然后呢,进程中,进程中有一个进程中有一个一个什么一个线程,线程的执行一个主线程,有一个主线程啊主线程啊然后呢,这个时候来完成这样一个操作啊,比如说这是啊工作内容,比如说这是工作内容,工作内容好,那么接下来呢,看一下我们如何用这个是工作内容,然后呢,我给这些人打电话是吧?啊,这是我的工作哈,那么接下来就是说我要给这些人打电话的时候,我是使用的一个循环,然后呢去不停的调这个函,呃,这个函数对不对,那么调函数的话,就等于我们在进行这工作,但是实际上现在是这样的,就是说我们这个工作啊,效率有点慢,为什么呢?它不能同时做,就是说它一次只能执行一个任务,对不对,就是单进程就这样嘛,单进程里边就一个线程,然后就开始干这件事好,那么这个时候怎么办呢?啊,你可以有两种选择,第一种呢是给这个,给这个增派人手,就是给这个部门增派人人手,第二个是用多个部门来做啊,多个部门比如说销售一部。
13:08
销售二部销售干部对不对,然后或者是就是这个销售部门里边再多招几个人都OK,那看你怎么选,如果你选择举个例啊,如果你选择用多进程,那就类似啊啊多进程多进程进程啊,那就类似啊类似类似于类似于类似于这个多个部门,多个部门创建啊,创建多个部门,创建多个部门。多个部门来完成啊,这项来完成这项工作,这项工作啊,这项工作啊,那么这个时候怎么去看一下,如何去使用我们的这个多线程啊,多线程的话需要导包啊,导包导包的话是from F-R-O-M啊from我们的这个叫U。很长这个对,就这个长度,我也我也不知道它是啥啊,来K来这个啊,这是我们的一个进程啊,进程类进程这个模块导入以后怎么去用啊,导入的话是这样的啊,就是我们在这个地方,如果想使用多技能的话,就是呃,你启动一个。
14:02
呃,他怎么做呢,就是它的用法啊,它的用法是这样的,就是我们先来一个。呃,来一个来一个,来一个p list吧,来一个list啊,这是我们进程的一个数啊,那么之后呢,是这样的forit啊,然后呢,In我们当前的user list,就是还是我们的工作是不是也是需要给这人打电话,那么这个时候怎办呢?哎,每次每个任务每个任务。每个任务。啊,就是就是循环,这叫循环创建创建进程嘛,循环创建进程啊,循环创建进程怎么去循环创建的是这样的啊,用我们刚才这个类啊pro。啊,PL创建这个类啊,然后呢,这里边呢,要给它传两个参数啊,第一个叫PAR target啊等于你当前的就是要执行的函数就是work啊,然后接下来呢,接下来的话呢,还有就是你要给这个东西传参数呢,二等于我们当前呢啊,它是一个呃,它要求呢是一个圆组啊所以这里的item,然后别忘了加一个逗号要求这个圆组啊那么循环创建进程以后,接下来这个进程呢,要启动就是启动进程叫做启动启动启动这个叫进程进程启动进程启动进程的话,这个地方需要怎么做呢?用这个P啊这个进程点上这个start stt start啊进行启动,而这以后呢,接下来怎么打,把进程加入到啊进程进程加入到啊创建的进程加入到进程。
15:20
进进程诶好所手都打错了啊,进程加入到什么呀?加入到列表中,列表列表中好加入到列表中干什么啊,我们先来看一下这样啊,先加入进去he list p list点点A把这个P加进去啊,而这以后干什么呢?啊在下边就是说呃这个每一个进程,如果就是你在里边是框哐哐的创建进程,创建完进程以后,接下来进程这个时候执行什么,它是启动了,但还没有工作,这个时候怎么办呢?需要使用一个叫教换的方法来让你的进程,这个叫主色你当前的一个进程啊呃,它叫做什么来着。我记得好像是要交。python.org来我们找一下,呃,看一下我们这个叫文档文档,然后找到3.8,然后有个图书馆参考资料,然后再往下找。
16:04
进程的一些网络。啊,并发执行基于线程和基于进程的,来我们看一下进程的这个操作啊。嗯,呃,看一下有没有这是一个类啊,是一个类啊,你看就是说呃,通过就是在这个方法中,通过这个对象,然后调用其大点来生成进程,然后呢,遵循这个方法,然后接下来呢,它有一个方法叫做交问,我们看一下这个交问的解释在哪呢。哎,他都没有教你。嗯。诶,他教我的方法呢。啊,这里都在用啊,都在用,但他没有没有跟我们讲,但而且它下边还有告诉你近程词的一些使用。John,在这里啊,如果选,然后该方法将到调用其他调用方法的进程。嗯。看一下大开始流程的活动,每个对象构成对象是最多只能调用一次啊,也就说你需要先使用这个叫呃,Start来生成啊,看一下这个位置是创建进程,然后这个是生成生成进程,生成进程任务啊,其实就是这个位置,实际上你是在安排完进程以后生成这个进程,然后接下来呢,把进程加入到列表中,然后呢,后面是统一用这个胶胶用的话呢,是什么呢?是一个主色啊,主色当前的一个叫做什么?呃,这个方法呢,是专门主塞我们进程的一个执行,看没。
17:23
啊,他说那啊还可以有一个可选参数,可选参数为time out为now啊为now就默认值该方法将阻塞直到交调用其他其方法的进程终止,也就是说这个位置啊,终止最后的进程,也就是说阻塞阻塞终止,阻塞终止,终止我们进程的进程跟进程到执行,执行就是最后它的结束啊他就结束,那这个位置怎么去做呢?就是结束的话,我们呃只需要去调用这个交的方法就可以了,所以这个位置呢,我直接这样写啊来简单一点啊,就是呃做in,我们list,其实其实样就我list这个方法啊,挨个去这样做操作,但是这样的话你没有必要,因为我们这个方法里边不做其他操作,就是把那个列表的所有进程都要做,要这个阻塞掉,那么这个时候,所以你可以写成for I in,我们当前的k list,然后呢,用我们的叫什么列表配导式对吧?啊,这个位置写成I点交括号啊,这样的话就完事完事了,好来看一下啊,来看一下,呃,这是我们使用这个。
18:24
多进程方法来完成,这是普通方法啊,普通啊就是普通方式,普通方式方式来完成来完成啊,这个是以前的,我们接下来呢,这个是多进程,那我们可以这样啊,来看一下以前的方法是怎么样呢?还记得吧,就是先给刘道法打完之后呢,给张学友打,嗯,张学友结束之后呢,给联涛伟打,是不是这样的一个过程,对不对啊,那么接下来看一下我们这位子创建多进程,多进程的话就等于是给每个任务,就是你这里边有三个任务,那我就招三个部门来完成,然后那右键来运行一下走,你看那看下边他是同时给刘德华打电话,给张学友打电话,给联华打电话,然后几乎是同时结束,好,这就是我们多进程啊,多进程。的一个操作,好,那爸说,那你这么说就多什么实加是这哈,我们有一个方法,可以专门获取到当前的一个镜能号Y逗号以后我们的is号,那么在我们当前的这个叫。
19:06
呃呀,在哪个位置呢?呃。在这我们可以看到啊,进程号啊这位,嗯,这个就写一下吧,啊进程进程号进程号进程的ID号,进ID号是OS。C。大家会看到它的开始和结束啊,来右键运行,重点看这。531153125313,然后5311结束,5312结束,5313结束,看到吗?这就是我们使用这个叫进程的方式,多进程的方式来完成我们这个操作,然后呢,普通方式,你注意看一下啊,普通方式的话就是其实就是从头到尾,然后呢执行完,然后呢,直到他所有的都完事来看一下。你看。5316。啊,他干一件事,然后结束以后,再给另外一个人打5316,然后再给另外一人打55316,就从头到尾都是这一个进程在干一件事啊,在干一件事啊,这是我们当前的一个呃进程的一个操作啊,进程操作那么呃在类似啊,就我们刚才给大家演示这个多进程,就类似于创建的多个部门来完成这项工作好了。
20:10
那么很明显你也知道对不对,创建进程就是就这么说吧,我公司里举个例子,就是这些任务,然后呢,呃,然后呢,需要每一个任务都要创建一个部门,那这个活没法干了,对不对,我公司的这个机构会越来越臃肿,对不对,那么这个时候实际上而且也就是说它消耗和浪费的资源和性能更大,那么这个时候我们怎么办呢?可以选择用多线程,多线能相对来讲呢,就更快一点啊,更快,相对来讲更快啊对,好,所以就是而而且只不过说我们无法明很明显的探索区别啊,还是通过这个例子大家能理解啊,多线程多线程类似类似类似于给这个部门,给这个部门增加,给这个部门增加,增加更多的增加人手。增加人手,人手。人说,诶。来来,这个叫什么参与工作啊,来参与工作,来参与工作,哎,那这样的话就是,呃,是不是就是大家都在共部门里边,然后共享这个信息,共享这个数据,这样的话我们操作起来是不是更快一点呢?对不对,好,那么接下来我们看一下啊,如何使先使用这个叫多线程呢?多线程跟我们多线程类似啊,也是需要导,导这个叫导导一个包,那么导的这个包是。
21:11
ROM啊,它这个包的TR。对第一个,然后啊,导入我们的叫T。Re,啊啊re,好,来这个啊啊下面这个位置啊,来看一下我们如何去完成这样一个套,跟上面是完全一样的啊,那么就无非就是使用这个叫多线程,多线程的话怎么做呢?来看一下啊。其实这样的跟这个完全相同,完全相同的话,我把这个复制一下好吧,复制一下啊,完全一样啊,就是调度方法不同,调动方法和这个对象不一样,仅此而已,仅此而已啊来多线程啊,这里不是原来不是创建进程嘛,好,这个地方创建啊,创建循环,创建子线程啊,子线程子线程是什么呢?就是每一个进程里边都会有一个主线程,然后呢,你其他情况下,在这个进程当中,在创建的线程都属于子线程啊,就叫创建线程吧。对吧,好。它叫T呃液液地啊,然后呢,下面也色啊,这个是生成线成线成用生成线成线线成啊,然后下面呢,把线程加入到线程加入到列表当中,然后下面呢,呃阻止叫阻射终,这个叫线程的线程。
22:17
组合中止,我们算等完事好,我们看一下有没有其他问题,没有参数完全相同,看相等,好来右键总结看着。是吧,535053505350是不是同都是同一个,我们的这个叫什么呢?进程号进程号,但是很明显他这个电话是不是也同时打出去的,哎,挂电话的这个实际基本上基本上就这样的一个过程,好吧,这就我们当前这个叫多性能呃,多进能专线层,呃,其实大家可以看到我们现在这个进程号,这个进程号,进程号就刚才这个是吧?哎呀,咱们给大家看看我们的线程啊。嗯。我们看一看线程的话,线程的话,我们在这个包里边,其实有一个方法可以去看见,我们看就是看一下我们运当前运行程序的这个线程的,来呃,看一下贴测啊T一次这个方法,然后呢,嗯,放C把这个模块导进来以后,来这个叫线程线程啊线程哈。
23:05
啊是是是哪一个来a sorry sorry来括号,呃,这个是我们TR,然后点上一个叫C。嗯,哪个第一个第第一个好像是。CTRLC复制一下。少一个放放在。放这OK了啊OK好,我们来看一下啊,来看一下这个多线程,多线程来。一点钟你看。123。看那啊123他们是不是都是同一个,他们都是你看123123对不对,然后呢,89889688962啊,这个232和4064是不是三个线程,三个线程啊对,就是这个操作啊好,然后同时我们看一下上面那个,嗯,有小伙伴有没有想看一下时间顺序的,其实都是零。其实这个时间的话,你可以自己,我们用那个thon方法,之前是不是讲过一个就是的话,你知道就是如何如何统计这个程序的时间,对吧。
24:02
来看一下看一下啊。多进程的方式,多进程方式,每个进程创建,创建进程号收入不一样啊,进程号不一样,哎有小伙伴说诶这个进程号不一样,但是这个线程号怎么是一样的,是这样的,就说我们当地这个程序创建了这个线程以后,它结束,然后呢,用另外一个程序创建了一个线程,这个线程实际上就原来的一个,但是进进程已经结束了,就是进程不是同一的啊对进程不同一的啊,然后。还有我们那个谁,还有我们一开始的话。哎,我的个天怎么把它注释掉。稍等啊干嘛,我们再看一下通这个啊这个。有点运行,看到看到进程线程。进程线程,进程线程都是同一个啊,都是同一个,好了,这就我们这个当前的一个区别啊,当前区别好了就给大家呃解释到这里吧,啊课下小伙伴呢,可以把这个内容啊多做一个练习,也当然了也也有小我们不知道你们有疑问就说为什么我们要讲这个多进程和多线程,实际上就是说我们在开发在这个写爬种的过程当中,比如说页码数比较多,就像我们上午爬的那个叫呃上爬的那个叫做。
25:00
呃,那个叫什么西式代理的吧,西式代理的话,它这个里边,然后你有3000多页,3000多页的话,你一个进程,一个进程开启之后用一个线程,然后去这个,呃,解析页面爬取数据,是不是速度就慢很多啊对,其实我们有更好的方法就是使用这种啊进多进程与多线程的方法啊,当然了,这个多进程和多线,多线程我在这里创建了,比如说我这边有三个任务,就创建了三个进程和三个线程,那如果有十个任务呢?难难道说创建十个进程或者十个线程嘛,对吧?那如果有1000个1万个的对不对?所以也就说进程和线程你是要一定要控制它的数量的,不可能使用这个进程或线程过多,因为过多的话可能导致你的程序啊,就是内存消耗会比较大,那么这个时候呢,你的程序其实也运行不了多快,到最后的话,你频繁的去创建技能和限能的话,创建的比较多,你这个电脑可能就是也就是说,呃,这个这个你这个内电脑的内存性能根本就受不了啊,CPU也处理不了啊,所以这个时候也会有问题啊,所以就下点呢,我们大家得看一下关于这个进程池与线程词,这样其实进程词进程的话,我们实际在开发过程中可能用的用不特别多了,所以下节课呢,我给大家主要给大家讲一下,就是如何使用这个线程词来进行操作就可以了,好吧,那这节课我们关于进程与线。
26:01
程的基本时上和操作就到德点,关于他们俩的效率,他们效率肯定普通,肯定多进程也比普通方法好,对不对,然后呢,多线程又比这个叫多进程消耗的性能更少,但是实际上时间上他们可能他们俩实际上是差不了多少,比如说举个例子啊,举个例子,多进程如果运行程序需要15秒的话,就是创建三个进程,如果需要15秒的话,那么这个多进程三个线程执行差不多就是十秒左右,也就是说差的并不是特别多啊,但是也有很明显区别,同时多线程不会像多线程一样去浪费那么多的空间和资源啊,所以这就是它的一个好处,所以下节课呢,我们给大家主要看一下如何创建一个线程池啊,这样的话就是我们稳定的线程一直在帮我们去完成这项工作,而不是啊一直不停的去创建线程,这其实是有为我们这个程序开发的。好了,下节课给大家去看一下线程词的一个使用,好,这节课我们先到这里。
我来说两句