软件测试升职加薪必看系列:自动化测试Python进阶(十)

Python进阶10

软件测试升职加薪必看系列:自动化测试Python进阶(十)

多线程

python中的GIL

  • GIL(Global Interpreter Lock),就是一个锁。
  • 中的一个线程对应于 C语言 中的一个线程。
  • 使得同一时刻只有一个线程在一个上执行字节码,无法将多个线程分配到多个上进行同步运行。如果在单核上,线程是并发运行,而不是并行。

软件测试升职加薪必看系列:自动化测试Python进阶(十)

image

首先,这样效率不高,但是看似也不会产生数据访问冲突的问题,毕竟同一时刻只有一个线程在一个核上运行嘛,然而:

如果按照上面的理解,线程间很安全,最后结果应该会是 0,运行三次代码的结果如下:

这说明两个线程并没有顺序异步执行。在一些特定的情况,这把锁会被打开,一定程度上达到并行的效果。

会根据线程执行的字节码行数以及时间片以及遇到 I/O 操作打开,所以的多线程对 I/O 密集型代码比较友好,比如,文件处理和网络爬虫。

多线程编程

线程模块

在中提供了两个模块来使用线程和,前者提供了低级别、原始的线程以及一个简单的锁,相比后者功能还是比较有限的,所以我们使用模块。

使用案例

直接使用Thread来实例化

可以看到,整个程序的运行时间基本上是 0s,这是因为整个程序中实际有三个线程:创建出来的两个线程和主线程(MainThread),那两个线程创建出来后就不受主线程控制了,他们的工作不占用主线程的时间,主线程除了计时就没有其他逻辑了,因此主线程持续时间是几乎是 0s。

但是主线程逻辑完成后并没有退出,它等待了另外两个线程运行的结束,如果主线程在其他两个线程结束之前就退出了,意味着整个程序进程终止了,另外两个线程会迅速终止。如果我们就是有这种需求,那就可以将另外两个线程配置成守护线程,主线程结束,他们也立刻结束。

主线程逻辑执行完后就退出了,其他两个线程还没来得及打印消息也被一并终止了。

如果主线程需要等到两个线程执行完后再打印整个运行时间,就可以这么设置:

现在总的运行时间是 4s,意味着主线程等待了两个子线程的运行,而且两个子线程是同步执行的,。

通过继承Thread实现多线程

用同样的逻辑实现子线程类,最后结果如下:

来源:测试小小小

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月13日
下一篇 2020年8月13日

相关推荐