什么是进程
-
进程是执行中的程序
-
拥有独立地址空间,内存,数据栈等
-
操作系统统一管理
-
派生(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模块案例】,使得代码更加符合面向对象编程的思想。
代码:
运行结果:
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】