Python 实现两个线程交替执行的两种方案
本文介绍在 Python 中实现两个线程交替执行的两种常见方法。核心思路是利用 threading.Lock 创建两个锁对象,通过“获取对方锁、释放自己锁”的机制实现同步。文章提供了基于循环打印和递归调用的完整代码示例,详细解析了锁的初始状态设置、线程启动顺序及执行流程,帮助开发者快速掌握线程同步技巧。
Python 多线程交替执行方案概览
以下内容直接展示核心代码实现,便于快速参考。
方案一:基于循环打印的交替执行
import threading
import time
def a():
while True:
lockb.acquire()
print('a')
locka.release()
time.sleep(0.5)
def b():
while True:
locka.acquire()
print('b')
lockb.release()
time.sleep(0.5)
if __name__ == "__main__":
locka = threading.Lock()
lockb = threading.Lock()
ta = threading.Thread(None, a)
tb = threading.Thread(None, b)
locka.acquire() #保证a先执行
ta.start()
tb.start()
核心逻辑在于:线程在执行过程中需先获取对方的锁,待任务完成后释放自己的锁,从而实现交替控制。
补充知识:线程同步——两个线程轮流执行 python 实现
具体代码实现如下:
方案二:基于递归调用的交替执行
import threading
import time
lockA=threading.Lock()
lockB=threading.Lock()
def printA(n):
if n<0:
return
lockA.acquire()
print("+++")
lockB.release()
time.sleep(0.1)
printA(n-1)
def printB(n):
if n<0:
return
lockB.acquire()
print("***")
lockA.release()
time.sleep(0.2)
printB(n-1)
lockB.acquire()
t1=threading.Thread(target=printA,args=(10,))
t2=threading.Thread(target=printB,args=(10,))
t1.start()
t2.start()
t1.join()
t2.join()
在准备实习面试时,重新回顾操作系统中的线程同步概念很有必要。
基本思想:创建两个锁 lockA 和 lockB。每次线程执行完毕后,先锁定自己的锁,同时释放对方的锁,以此控制执行顺序。
初始状态下,若希望线程 A 先执行,则需先获取 lockA(即锁住 A),此时 lockB 为释放状态。线程 A 启动后获取 lockB 并执行,随后释放 lockA;线程 B 获取 lockA 并执行,随后释放 lockB,如此循环。
以上即为 Python 实现两个线程交替执行的完整内容,希望能为读者提供有价值的参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









