🗒️Python 多线程编程
type
status
slug
summary
tags
category
icon
password
Date
线程有就绪、阻塞、运行三种基本状态
- 就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机。
- 运行状态是指线程占有处理机正在运行。
- 阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。
三种状态的相互转化如图

Python中的多线程创建,
1. 实例化Thread类
2. 继承Thread
多线程同步——Lock 互斥锁
互斥锁只允许一个线程访问共享数据
多线程同步——Semaphore 信号量
信号量是同时允许指定数量的线程访问共享数据
多线程同步——Condition
Condition 用于在多个线程之间进行更复杂的状态同步。Condition基于底层的Lock或RLock对象工作,但提供了额外的方法,如wait()、notify()和notify_all(),以便更灵活地控制线程间的同步Condition能让一个线程A停下来,等待其他线程B,
线程B满足了某个条件后通知(notify)线程A继续运行。
线程首先获取一个条件变量锁,如果条件不足,则该线程等待(wait)并释放条件变量锁;
如果条件满足,就继续执行线程,执行完成后可以通知(notify)其他状态为wait的线程执行。
其他处于wait状态的线程接到通知后会重新判断条件以确定是否继续执行
使用场景
- 生产者-消费者问题:
Condition对象经常用于解决生产者-消费者问题,其中一个或多个生产者线程生成数据,一个或多个消费者线程消费数据。
- 有限资源: 在多线程环境中,通常有一些资源是有限的,需要通过某种同步机制来进行分配。
- 复杂的同步需求: 不同于基础的
Lock或Semaphore,Condition允许你在更复杂的场景下进行同步,例如,当某个条件成立或某个状态改变时唤醒一个或多个等待的线程。
示例:生产者-消费者模型
Condition优缺点
- 优点:
Condition对象提供了一种高级的同步机制,允许更复杂的状态同步。
- 缺点: 使用
Condition可能会使代码变得更复杂,并且如果不正确地使用,可能会导致死锁或其他同步问题。
多线程同步——Event
Event 特别适用于那些只需要线程间简单通信的场景,而不需要复杂的状态同步或数据交换。然而,对于更复杂的同步需求,可能需要使用更高级的同步原语,如Condition或Semaphore队列——queue
queue.Queue 提供了一种线程安全的方式来在多个线程之间传递数据,意味着不需要使用额外的锁或其他同步机制来保护队列操作,使得编写多线程程序变得更加简单和安全Loading...