Python之线程Thread(一)

50 篇文章 ¥19.90 ¥99.00
本文介绍了Python中的线程,包括线程的定义、创建方式(方法包装和类包装)、join()方法、守护线程的概念及如何设置,以及深入讨论了Python的全局解释器锁(GIL)问题,阐述了GIL限制了多核CPU并行执行Python线程的现象。

一、什么是线程

image-20211204102521781

线程(Thread)特点:

  1. 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位
  2. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
  3. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
  4. 拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度;
  5. 调度和切换:线程上下文切换比进程上下文切换要快得多。

二、线程的创建方式

Python的标准库提供了两个模块:_threadthreading_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。

线程的创建可以通过分为两种方式:

1. 方法包装

2. 类包

### Python线程互锁的实现 在多线程编程中,当多个线程试图同时访问和修改共享资源时,可能会发生竞态条件。为了避免这种情况并确保数据的致性和安全性,可以使用互斥锁(Mutex Lock)。Python 提供了几种机制来处理这种场景。 #### 使用 `threading.Lock` 最简单的办法是通过 `threading` 模块中的 `Lock` 类创建个基本的互斥锁对象: ```python import threading lock = threading.Lock() def thread_safe_operation(): with lock: # Critical section code here pass ``` 这种方式适用于大多数情况下保护单个操作不被其他任何线程打断的需求[^1]。 #### 可重入锁 RLock 对于更复杂的情况,比如同个函数内部可能需要再次获取已经持有的锁,则应该考虑采用可重入锁 (`RLock`) 来代替普通的 `Lock`. 这样可以在不影响程序逻辑的前提下允许同线程重复进入锁定区域而不会造成死锁: ```python rlock = threading.RLock() with rlock: do_something() with rlock: # 同作用域内第二次调用也是安全的 do_more_things() ``` 这种方法特别适合于那些具有嵌套结构的方法或类成员函数之间的协作. #### Condition Objects (条件变量) 如果除了控制并发外还需要协调线程间的通信,那么还可以借助 `Condition` 对象完成更加精细的操作。它结合了锁的功能以及等待/通知机制,使得某些特定条件下才继续执行成为可能. ```python condition = threading.Condition() def consumer(): while True: with condition: condition.wait() # 等待生产者唤醒 consume_item() def producer(): while True: produce_item() with condition: condition.notify_all() # 唤醒所有消费者 ``` 这有助于构建高效的生产者-消费者模式应用程序[^2]. #### Semaphore (信号量) 最后提到的是信号量(semaphore),这是种高级别的同步原语,用于限制同时访问某个资源的最大数量。例如,设定 semaphore 的初始值为 n 表示最多只允许 n 个线程同时处于活动状态;旦超出这个数目,后续尝试加入的线程将会阻塞直到有足够的空间为止[^4]: ```python semaphore = threading.Semaphore(3) def limited_access_resource(): with semaphore: use_the_resource() ``` 综上所述,针对不同的应用场景可以选择合适的工具来进行有效的线程间同步管理,从而保障系统的稳定运行与高效性能表现[^3].
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟之编程

您的支持将成为我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值