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

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

本文介绍在 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。