当前位置: 代码网 > it编程>前端脚本>Python > Python中线程同步的实现

Python中线程同步的实现

2025年06月17日 Python 我要评论
多线程案例说明:唱歌方法sing()跳舞方法dance()启用两个线程调用主线程结束代码# 导入线程模块import threadingimport timedef sing(name,age):

多线程

案例

说明:

  • 唱歌方法 sing()
  • 跳舞方法 dance()
  • 启用两个线程调用
  • 主线程结束

代码

# 导入线程模块
import threading
import time


def sing(name,age):
    time.sleep(2)
    print('唱歌者姓名:' + name + ',年龄:' + str(age))
    print('正在唱歌...')


def dance(name, age):
    time.sleep(2)
    print('跳舞者姓名:' + name + ',年龄:' + str(age))
    print('正在跳舞...')


if __name__ == '__main__':
    # args 元组传参
    t1 = threading.thread(target=sing,args=('alice', 18))
    # kwargs 对象传参
    t2 = threading.thread(target=dance,kwargs={'name': 'bob', 'age': 18})
    t1.start()
    t2.start()
    print("主线程结束")

  • 运行

在这里插入图片描述

问题现象

  • 输出的结果和代码的执行顺序不一致
  • 最后的主线程输出竟然最先输出
  • 线程的执行是异步的并非同步
  • 那么如何让线程同步执行呢?请看下一章节 《解决办法》

解决办法

线程同步

  • 线程等待
  • 互斥锁

线程等待

调用线程的等待方法: join()

  • 代码
# 导入线程模块
from threading import thread
import time


def sing(name,age):
    time.sleep(2)
    print('唱歌者姓名:' + name + ',年龄:' + str(age))
    print('正在唱歌...')


def dance(name, age):
    time.sleep(2)
    print('跳舞者姓名:' + name + ',年龄:' + str(age))
    print('正在跳舞...')


if __name__ == '__main__':
    # args 元组传参
    t1 = thread(target=sing,args=('alice', 18))
    # kwargs 对象传参
    t2 = thread(target=dance,kwargs={'name': 'bob', 'age': 18})
    t1.start()
    t1.join()
    t2.start()
    t2.join()
    print("主线程结束")

  • 运行

在这里插入图片描述

互斥锁

步骤:

  • 导入锁模块:from threading import lock
  • 实例化锁:lock = lock()
  • 获取锁:lock.acquire()
  • 释放锁:lock.release()

代码

# 导入线程模块
from threading import thread, lock
import time


def sing(name, age):
    # 获取锁,用于线程同步
    lock.acquire()
    time.sleep(2)
    print('唱歌者姓名:' + name + ',年龄:' + str(age))
    print('正在唱歌...')
    # 释放锁,开启下一个线程
    lock.release()


def dance(name, age):
    # 获取锁,用于线程同步
    lock.acquire()
    time.sleep(2)
    print('跳舞者姓名:' + name + ',年龄:' + str(age))
    print('正在跳舞...')
    # 释放锁,开启下一个线程
    lock.release()


# 创建一个锁
lock = lock()
if __name__ == '__main__':
    # args 元组传参
    t1 = thread(target=sing, args=('alice', 18))
    # kwargs 对象传参
    t2 = thread(target=dance, kwargs={'name': 'bob', 'age': 18})
    t1.start()
    # t1.join()
    t2.start()
    # t2.join()
    # print("主线程结束")

运行

在这里插入图片描述

到此这篇关于python中线程同步的实现的文章就介绍到这了,更多相关python 线程同步内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com