本文首发于知乎
上一篇文章实现多线程的方式是
- 创建函数
- 用
Thread
函数创建进程,将要运行的函数传入其中
本文我们讲另一种实现多线程的方式————从threading.Thread类继承出一个新类,主要实现__init__
和run
方法
一
首先我们来看一个最简单的例子,只实现了run
方法
1 | 复制代码import time |
总结一下
- 定义一个类,继承
threading.Thread
类,里面只需要定义run
方法 run
方法相当于之前传入Thread
的那个函数,注意只能用run
这个名字,不用显式调用,线程start()
时会自动调用run
- 创建类的实例时不需要传入参数,得到的结果就可以调用
start join
等方法 - 上一篇文章提过
Thread
对象可以调用start join run
等方法,其实当时调用start
就自动调用了run
。这里只不过是在新类中重写了run
方法,线程调用start
时就会自动执行这个run
二
上面每次运行的run
都是一样的,真正使用时很少会这样用,有时会需要传入一些区别性的参数,这就需要定义类的__init__
了,我们来看下面的例子
1 | 复制代码import threading |
上面代码实现10个线程抓取豆瓣top250网站10页的电影名,通过__init__
将循环信息传到类之中。
三
上一篇文章不使用类来使用多线程时,讲了Thread
函数的参数,Thread
对象的方法和一些可以直接调用的变量,这里我们分别讲一下
Thread
函数的参数。初始化线程时传入一些参数,这里也可以在__init__
中定义Thread
对象的方法。这里可以用self
直接调用这些方法threading.activeCount()
等直接调用的变量。在这里依然可以调用
所以用类的方法不会有任何限制,下面来看一个使用的例子
1 | 复制代码import time |
返回结果如下
1 | 复制代码thread 0 |
四
使用类继承方式其实还有另一种形式。
之前是直接用run
定义计算函数,如果已经有一个计算函数,也可以用传入的方式而不是改写成run
1 | 复制代码import threading |
欢迎关注我的知乎专栏
专栏主页:python编程
专栏目录:目录
版本说明:软件及包版本说明
本文转载自: 掘金