Python线程同步有何作用,怎样实现
Admin 2022-05-21 群英技术资讯 953 次浏览
这篇文章主要介绍了Python线程同步有何作用,怎样实现相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python线程同步有何作用,怎样实现文章都会有所收获,下面我们一起来看看吧。如下图,明明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爬虫selenium有何用?selenium的用途之一就是可以拿它来做爬虫,但很多朋友对于Selenium并不了解,下面小编就给大家来介绍一下selenium优缺点和工作原理等等,有需要的朋友可以参考。
大家好,本篇文章主要讲的是Python中引用传参四种方式介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
python编码要注意哪些规范?我们在学习python编码的时候,要有好的编码习惯,所有了解python编码规范很有必要。因此,下面就给大家来介绍一下关于缩进、行的最大长度、空行、命名约定、字符串引号、注释等使用的规范。
Python 囊括了大量的复合数据类型,用于接受其它数值。最有用的是列表,即写在方括号之间、用逗号分隔开的数值列表。列表内的数值不必全是相同的类型。
Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。浮点型、复数类型、布尔型(布尔型就是只有两个值的整型)、这几种数字类型。列表、元组、字符串都是序列。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008