什么是进程

  • 进程是执行中的程序

  • 拥有独立地址空间,内存,数据栈等

  • 操作系统统一管理

  • 派生(fork或spawn)新进程

  • 进程间通信(IPC)方式共享信息

什么是线程

  • 同进程下执行,并共享相同的上下文

  • 线程间的信息共享和通信更加容易

  • 多线程并发执行

  • 需要同步原语

python与线程

  • 解释器主循环

  • 主循环中只有一个控制线程在执行

  • 使用全局解释器锁(GIL)

GIL保证一个线程

  • 设置GIL

  • 切换进一个线程去运行

  • 执行下面的操作之一

    指定数量的字节码指令

    线程主动让出控制权

  • 把线程设置回睡眠状态(切换出线程)

  • 解锁GIL

  • 重复上述步骤

两种线程管理

Python提供了两种线程管理模式。

  • _thread:提供了基本的线程和锁。

  • threading:提供了更高级别,功能更全的线程管理。threading底层使用了_thread。

      支持同步机制

      支持守护线程

_thread模块

使用_thread模块案例1

代码:

运行结果:

注意:这里主方法中必须加上time.sleep(6),否则主进程退出后,所有子进程都将强行退出,所有子线程将不被执行。这里也该模块的缺点之一,因为它没有守护线程的概念。


以下结果是不加time.sleep(6)的效果。

使用_thread模块案例2-利用锁

上述案例中其实存在缺点。在实际应用中,我们并不确定主线程需要等待子线程几秒钟,子线程才能结束。所以本案例加入锁,可以有效的解决这一问题。

代码:

运行结果:

threading模块

使用threading模块案例

threading自带锁,可以更有效解决上述案例【使用_thread模块案例2-利用锁】的问题。

代码:

运行结果:

注意:loop 0 和loop 1的执行先后顺序不是一定的。

Thread类

使用threading模块案例-重写threading.Thread

我们可以继续改进上述案例【使用threading模块案例】,使得代码更加符合面向对象编程的思想。

代码:

运行结果:

最后: 下方这份完整的软件测试     视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

更多推荐