python学习笔记之多线程

本文介绍了Python中多线程的基本概念及其实现方式,包括thread和threading模块的区别与使用方法,锁对象的作用,以及如何管理和控制线程的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python多线程可以通过导入thread模块,来使用thread中的函数,或者通过继承threading类来创建线程。

每个进程都拥有自己的地址空间,内存,数据栈以及记录其运动轨迹的辅助数据。

python代码的执行主要由python虚拟机(也叫解释器GIL主循环)来控制,对python虚拟机的访问由python全局解释器锁GIL来控制,正是这个锁保证了任一时刻只有一个线程在运行。

不建议使用thread模块的原因:这样做有很多原因,很明显的一个原因是,当主线程退出的时候,所有其它线程没有被清除就退出了。但另一个模块 threading 就能确保所有“重要的”子线程都退出后,进程才会结束。threading比thread更加高级。

另一个不要使用 thread 原因是,对于你的进程什么时候应该结束完全没有控制,当主线程结束时,所有的线程都会被强制结束掉,没有警告也不会有正常的清除工作。我们之前说过,至少threading 模块能确保重要的子线 程退出后进程才退出。

python 3.3中使用import thread会报错,这是因为没有打开线程支持,需要重新编译python解释器才能运行。

python提供了几个多线程编程的模块:thread、threading、queue


表 18.1 thread 模块和锁对象 
 

      函数                                    描述 
thread 模块函数 
start_new_thread(function,  args, kwargs=None)           产生一个新的线 程,在新线程中用指定的参数和可的kwargs 来调用这个函数。参数args是函数function的参数
allocate_lock()                           分配一个 LockType 类型的锁对象 
exit()                                           让线程退出 
LockType类型锁对象方法 
acquire(wait=None)                   尝试获取锁对象 
locked()                            如果获取了锁对象返回 True,否则返回 False 
release()                            释放锁

其中start_new_thread函数要求一定要有前两个参数,即使运行的函数不需要参数,也要传入一个空的元组

表 18.2 threading 模块对象 
 
threading 模块对象               描述 
Thread                表示一个线程的执行的对象 
Lock                    锁原语对象(跟 thread 模块里的锁对象相同) 
RLock                 可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定)。 
Condition            条件变量对象能让一个线程停下来,等待其它线程满足了某个“条件”。如,状态的改变或值的改变。
Event                  通用的条件变量。多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活。 
Semaphore         为等待锁的线程提供一个类似“等候室”的结构 
BoundedSemaphore     与 Semaphore 类似,只是它不允许超过初始值 
Timer                  与 Thread 相似,只是,它要等待一段时间后才开始运行。


守护线程:守护线程是一个等待客户请求的服务器,在主线程运行的时候不用等待守护线程的退出就可以退出,设置守护线程:在thread.start()之前调用setDaemon设定线程为守护线程

实例化一个 Thread(调用 Thread())与调用 thread.start_new_thread()之间最大的区别就
是,新的线程不会立即开始。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值