Python 实现两个线程交替执行的两种方案

洛溪
洛溪
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍在 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 实现两个线程交替执行的完整内容,希望能为读者提供有价值的参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表