Python线程同步有何作用,怎样实现
Admin 2022-05-21 群英技术资讯 542 次浏览
如下图,明明t-0 > t-1 > t-2 (按照线程创建时间早晚排列)。最后输出居然是t-1最落后。
我们怎么样做避免错乱呢, 下面看看。
多线程,就是多个独立的运行单位,同时执行同样的事情。
多线程不是已经做到同时执行了吗?还需要同步干嘛?
是的,线程是同时被调用执行了,但是每个线程之间互相独立,也互相竞争了。
这就跟跑道上有3个运动员,枪响之后同时开跑,但是他们通常却不是同时到达终点。
同步是什么意思?
同步就是原本这条跑道跑三个人的加上同步之后,在任意时间上,只有一个人在跑道。
听起来是不是匪夷所思,怎么多线程不是为多个任务提高效率吗?加个同步不就一个时间只有一个任务执行了,这还扯啥多线程。
很遗憾,同步就是这个意思,我们有时会说完整一点,同步互斥!总结来说就是:同步是一种机制,它保证跑道上面任何时候只有一个运动员。技术上来说就是,同步保证 程序数据 任何时候只被一个线程操作。
我们使用同步机制的时候,也是在找那些应该被限制的'跑道‘,利用同步机制保证在那个跑道上任意时刻只有一个‘运动员'在上面跑步。
(解释的很清楚了,看不懂的可以找同学讨论上面的这几句)
我们了解了同步机制,下面看看锁。
threading.Lock
是一个类,我们能用它创建一个锁对象。
什么是锁?
维持同步互斥机制的媒介
相当于跑道有个大门,每次只开门让一个程序员进去跑
说错了,运动员(程序员还是需要多锻炼啊)。
锁要是坏了,后果可以自己想象(后面文章会说)。
我们下面代码会用到Lock的两个函数:
acquire函数:获取锁
release函数:释放锁
前文说过了,加上主线程,一共是4个线程。
运行下面代码看看:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/11/21 12:02 上午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷学委 # @XueWeiTag: CodingDemo # @File : __init__.py.py # @Project : hello import threading import datetime import time def dianzan_guanzhu(lock: threading.Lock): thread_name = threading.current_thread().getName() print("线程启动了:", thread_name) now = datetime.datetime.now() name = "python萌新" + thread_name lock.acquire() print("%s - %s name:%s" % (thread_name, now, name)) time.sleep(1) result = "好棒!" + name + " 关注雷学委,学会了开发知识!" print("%s - %s result:%s" % (thread_name, now, result)) lock.release() return result my_lock = threading.Lock() for i in range(3): mythread = threading.Thread(name="t-" + str(i), target=lambda: dianzan_guanzhu(my_lock)) print("mythread:", mythread) print("is_alive:", mythread.is_alive()) mythread.start() ac = threading.active_count() print("active_count:", ac)
下面是运行结果:
我们看到每个线程都完整完成了任务,不会出现三个线程互相穿插错乱的输出。
这里初学者可以感受一下同步的作用,效果。
以上就是一种线程协调方案。
线程同步,也并非同一步调,而是同步互斥!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了python中的一个小项目:利用pygame实现代码雨动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
lambda 函数是一个匿名函数(即,没有名称定义),它可以接受任意数量的参数,但与普通函数不同,它只计算并返回一个表达,Python 中的 lambda 函数使用以下语法表达:
字典(dictionary)我们都曾经使用过语言词典来查找不认识的单词的定义。语言词典针对给定的单词(比如 python)提供一组标准的信息。这种
这篇文章主要介绍了Python 权限控制模块 Casbin,Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型,更多相关内容感兴趣的朋友可以参考下面文章内容
这篇文章主要介绍Python数据类型,在Python学习中,Python数据类型是需要掌握的内容,下文示例具有一定参考学习价值,感兴趣的朋友可以看一看,希望大家阅读完这篇文章能有所收获。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008