Python中的Multiprocess和Multithreading(三)

Python中的Multiprocess和Multithreading(三)

在之前的文章中

介绍了什么是GIL和现在常用的current.futures,如果有想学习的同学点击上面的链接

这篇文章介绍一下threading模块

在这之前先简单说一下thread模块,thread模块提供了基本的线程和锁定支持。而threading模块提供了更高级别、

功能更全面的线程管理。

注意:应该避免使用thread模块,因为它对于进程何时退出没有控制。当主线程结束时,所有其他线程也都强制结束,

不会发出警告或者进行适当的清理


首先看一个简单的程序

Python中的Multiprocess和Multithreading(三)

讲解一下程序,13行向threading.Thread传入一个函数和函数需要的参数,生成一个多线程t。

注意:此时多线程还没有执行,只是生成了线程

17行调用start函数开始执行线程

20行调用join函数让主线程等待子线程执行完后再执行

执行结果:

Python中的Multiprocess和Multithreading(三)

可以看到主线程是在所有的子线程执行完后才执行的,如果将上面代码的join方法注释掉,执行结果:

Python中的Multiprocess和Multithreading(三)

可以看到主线程是没有等待子线程执行完后再执行的


利用threading创建多线程有三种方式

  • 创建Thread的实例,传给它一个参数

  • 创建Thread的实例,传给它一个可调用的类的实例

  • 创建Thread的子类,并创建子类的实例

通常我们只用第一种和第三种方案,由于文章开头的代码就是利用第一种方式,所以就不介绍了,接下来介绍另外两种方法

创建Thread的实例,传给它一个可调用的类的实例

Python中的Multiprocess和Multithreading(三)

我们给target传递了一个可调用的类(实现了__call__方法),作用和开头的程序是一样的

注意:传递的类是要可以调用的,既实现__call__方法

创建Thread的子类,并创建子类的实例

Python中的Multiprocess和Multithreading(三)

我们定义的MyThread继承了threading.Thread类

注意:

  • 必须在Thread的子类中调用Thread类的__init__方法

  • 重写run函数

threading模块还有很多的方法,大家可以去学习。我感觉还是current.futures好用一些

欢迎各位关注头条号:热衷python和前端


分享到:


相關文章: