主页 > DIY

Python简明教程第20节:多线程

时间:2019-11-08 来源:喜和香港

进程和线程

首先还是基本概念的解释,基本概念不清晰的话,可能没办法很好的理解这个问题。

上学的时候教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。

其实就是这样,一句话就把问题说清楚了,但是又好像什么都没说。

进程是向计算机申请资源的最小单位,在我们使用计算机的时候,看视频是一个进程,写文档是 一个进程,看简书也是一个进程,在写文档这个进程中,你可以同时写一个Excel和一个 Word,他们是就可以看作是两个不同的线程,共享写文档进程中的资源。

其实还可以这么说,进程是最小的资源单位,线程是最小的操作单位。

也就说,资源的分配最终会落实在进程上,而操作的分配最终落实在线程上。

因为线程使用的是进程中资源,是进程中的实际运作单位。一个线程是进程中一个单一顺序的指令串,或者说是一段代码更容易理解。在一个进程中可以同时有多个线程,每条线程可以执行不同的任务。其实说是同时,但是并不是,只是CPU很快,看起来像是同时执行而已。每个线程在执行过程中会将一些信息记录在“执行上下文”中,也就是Execution Context中。这里倒是有一个还不错的例子,中学的时候还没有电子书,都是在看纸质的小说,有一年《坏蛋是怎样炼成的》很流行,但是只有一本书,只能轮流看,每个人看完之后要记住自己看到了第几页以便下次拿到书的时候可以接着读。这个时候书就可以看作是一个进程,这几个读书的同学就可以看做是几个线程。这样就是以几个同学之间共享的方式完成了这本小说的阅读,如果他们读的够快,或者将时间快进到一定程度,就可以看做是这几个同学同时在读这本小说。

其实简单来说,就是多个操作主体对一个资源进行操作的情境。这次抛开枯燥的概念,进行干货的吸收。

Python3中多线程的模块有_thread和threading。

推荐使用threading。

_thread 提供了低级别的、原始的线程以及一个简单的锁,threading 模块包含了 _thread 模块中的所有方法。

创建线程

Python 中创建线程只要继承Thread即可,然后重写init方法和run方法:

然后调用start()就可以启动线程,线程启动会执行run()方法。