在之前的文章中
介绍了什么是GIL和现在常用的current.futures,如果有想学习的同学点击上面的链接
这篇文章介绍一下threading模块
在这之前先简单说一下thread模块,thread模块提供了基本的线程和锁定支持。而threading模块提供了更高级别、
功能更全面的线程管理。
注意:应该避免使用thread模块,因为它对于进程何时退出没有控制。当主线程结束时,所有其他线程也都强制结束,
不会发出警告或者进行适当的清理
首先看一个简单的程序
讲解一下程序,13行向threading.Thread传入一个函数和函数需要的参数,生成一个多线程t。
注意:此时多线程还没有执行,只是生成了线程
17行调用start函数开始执行线程
20行调用join函数让主线程等待子线程执行完后再执行
执行结果:
可以看到主线程是在所有的子线程执行完后才执行的,如果将上面代码的join方法注释掉,执行结果:
可以看到主线程是没有等待子线程执行完后再执行的
利用threading创建多线程有三种方式
创建Thread的实例,传给它一个参数
创建Thread的实例,传给它一个可调用的类的实例
创建Thread的子类,并创建子类的实例
通常我们只用第一种和第三种方案,由于文章开头的代码就是利用第一种方式,所以就不介绍了,接下来介绍另外两种方法
创建Thread的实例,传给它一个可调用的类的实例
我们给target传递了一个可调用的类(实现了__call__方法),作用和开头的程序是一样的
注意:传递的类是要可以调用的,既实现__call__方法
创建Thread的子类,并创建子类的实例
我们定义的MyThread继承了threading.Thread类
注意:
必须在Thread的子类中调用Thread类的__init__方法
重写run函数
threading模块还有很多的方法,大家可以去学习。我感觉还是current.futures好用一些
欢迎各位关注头条号:热衷python和前端
閱讀更多 熱衷python和前端 的文章