python类库32[多线程同步Lock+RLock+Semaphore+Event]

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一 多线程同步

由于CPython的python解释器在单线程模式下执行,所以导致python的多线程在很多的时候并不能很好地发挥多核cpu的资源。大部分情况都推荐使用多进程。

python的多线程的同步与其他语言基本相同,主要包含:

Lock & RLock :用来确保多线程多共享资源的访问。

Semaphore : 用来确保一定资源多线程访问时的上限,例如资源池。 

Event : 是最简单的线程间通信的方式,一个线程可以发送信号,其他的线程接收到信号后执行操作。 

二 实例

1)Lock & RLock

Lock对象的状态可以为locked和unlocked,
使用acquire()设置为locked状态;
使用release()设置为unlocked状态。

如果当前的状态为unlocked,则acquire()会将状态改为locked然后立即返回。当状态为locked的时候,acquire()将被阻塞直到另一个线程中调用release()来将状态改为unlocked,然后acquire()才可以再次将状态置为locked。

Lock.acquire(blocking=True, timeout=-1),blocking参数表示是否阻塞当前线程等待,timeout表示阻塞时的等待时间 。如果成功地获得lock,则acquire()函数返回True,否则返回False,timeout超时时如果还没有获得lock仍然返回False。

实例:(确保只有一个线程可以访问共享资源)

import threading
import timenum = 0
lock = threading.Lock()def func(st):global numprint (threading.currentThread().getName() + ' try to acquire the lock')if lock.acquire():print (threading.currentThread().getName() + ' acquire the lock.' )print (threading.currentThread().getName() +" :%s" % str(num) )num += 1time.sleep(st)print (threading.currentThread().getName() + ' release the lock.'  )        lock.release()t1 = threading.Thread(target=func, args=(8,))
t2 = threading.Thread(target=func, args=(4,))
t3 = threading.Thread(target=func, args=(2,))
t1.start()
t2.start()
t3.start()

结果:

RLock与Lock的区别是:RLock中除了状态locked和unlocked外还记录了当前lock的owner和递归层数,使得RLock可以被同一个线程多次acquire()。

2)Semaphore

Semaphore管理一个内置的计数器,

每当调用acquire()时内置计数器-1;

调用release() 时内置计数器+1;

计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。

实例:(同时只有2个线程可以获得semaphore,即可以限制最大连接数为2):

import threading
import time semaphore = threading.Semaphore(2)def func():if semaphore.acquire():for i in range(5):print (threading.currentThread().getName() + ' get semaphore')semaphore.release()print (threading.currentThread().getName() + ' release semaphore')for i in range(4):t1 = threading.Thread(target=func)t1.start()

结果:

3) Event

Event内部包含了一个标志位,初始的时候为false。
可以使用使用set()来将其设置为true;
或者使用clear()将其从新设置为false;
可以使用is_set()来检查标志位的状态;
另一个最重要的函数就是wait(timeout=None),用来阻塞当前线程,直到event的内部标志位被设置为true或者timeout超时。如果内部标志位为true则wait()函数理解返回。

实例: (线程间相互通信)

import logging
import threading
import timelogging.basicConfig(level=logging.DEBUG,
format="(%(threadName)-10s : %(message)s",
)def wait_for_event_timeout(e, t):"""Wait t seconds and then timeout"""while not e.isSet():logging.debug("wait_for_event_timeout starting")event_is_set = e.wait(t)logging.debug("event set: %s" % event_is_set)if event_is_set:logging.debug("processing event")else:logging.debug("doing other work")e = threading.Event()
t2 = threading.Thread(name="nonblock",
target=wait_for_event_timeout,args=(e, 2))
t2.start()
logging.debug("Waiting before calling Event.set()")
time.sleep(7)
e.set()
logging.debug("Event is set")

运行结果:

三 其他

1) 线程局部变量

线程局部变量的值是跟线程相关的,区别与全局的变量。使用非常简单如下:

mydata = threading.local()

mydata.x = 1

2)对Lock,semaphore,condition等使用with关键字代替手动调用acquire()和release()。


完!

转载于:https://my.oschina.net/apoptosis/blog/125202

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加个ing是什么意思_take的意思竟然是“要求”?奇奇怪怪的熟词僻义打卡终于来了!...

慢慢来,比较快。只要不喊停,我们就继续。考研人被玩坏了,出题人:只要我不承认,就没有人能阻止我。下面盘点一下出题人的x操作:2020年英语二完形:trying,乍一看是不是和“尝试”有关&…

每日一笑 | 今天是植树节,我想在你心里种点逼树

全世界只有3.14 % 的人关注了数据与算法之美(图片来源于网络,侵权删)

怎么用计算机计算出选手最后得分,WPS技巧:TRIMMEAN函数计算选手得分

如图1就是某大奖赛的选手评分情况表。在“最后得分”一项中,我们可以用LARGE函数或SMALL函数来计算,如在J3中输入下面的公式:AVERAGE(LARGE(B3:I3,{2,3,4,5,6,7}))即可以得到正确的结果。这里,我们介绍ET提供的内部平均值函数——…

Windows 程序包管理器 1.0 正式发布

在 Microsoft Build 2021 开发者大会上,微软正式发布 Windows Package Manager(程序包管理器)1.0 正式版,目前在 GitHub 上已有超过 1600 个程序包可供下载。Windows 程序包管理器是一个综合的程序包管理器解决方案,由…

围棋天才柯洁怒怼央视国际记者,用实力斩获清华大学免试资格

全世界只有3.14 % 的人关注了数据与算法之美3月10 日,国家体育总局发布了《2019年优秀运动员免试入学推荐名单》,一批在体育领域获得亮眼成就的运动员们,将获得中国各所高校的免试入学机会。在名单上,数据汪找到一个熟悉的名字——…

计算机专业杀毒,计算机病毒查杀

面对计算机病毒日益剧增,普通人的电脑中病毒的几率越来越大,学习几招查杀病毒的方法,有助于保持系统安全运行也避免一些不必要的损失。下面是学习啦小编跟大家分享的是计算机病毒查杀,欢迎大家来阅读学习。计算机病毒查杀步骤/方法…

Azure 上的网站如何识别不同国家和地区的用户

点击上方蓝字关注“汪宇杰博客”导语跨国服务的网站通常需要针对不同国家和地区的用户显示不同的内容。通常我们会根据用户的IP地址识别Ta所在的国家和地区,而自己编写代码以及购买和维护IP数据库,或使用三方的IP数据服务,是潜在的996成本。虽…

中小学不得在校内设置食品经营场所,量子摩尔定律问世,美团运营摩拜亏45亿,英伟达史上最大手笔收购,这就是今天的大新闻。...

今天是3月12日农历二月初六今天星期二去吃饭老板问要饭的吗一兄弟说我要饭的我要饭怎么觉得这对话有点怪怪下面是今天的大新闻中小学不得在校内设置食品经营场所(中国新闻网)据教育部网站消息,由教育部、国家市场监督管理总局、国家卫生健康委…

轮廓处理函数详细

ApproxChains用多边形曲线逼近 Freeman 链 CvSeq* cvApproxChains( CvSeq* src_seq, CvMemStorage* storage, int methodCV_CHAIN_APPROX_SIMPLE, double parameter0, int minimal_perimeter0, int recursive0 ); src_seq涉及其它链的链指针storage存储多边形线段位置的缓存m…

html5与课程思政,“课程思政”怎样做

[本站讯 ]为了提升学校教师的课程思政意识和课程思政建设水平,提高课程思政优秀案例征集水平,5月21日,教学促进与教师发展中心举办了课程思政专题线上分享会.中心主任张树永出席会议,120位教师通过雨课堂参加了直播活动.“课程思政”怎样做?教学案例设计…

Windows 11 快速体验:开始菜单居中,全系圆角设计!

系统类型:Windows 11 专业工作站版 系统版本:Dev系统版本号:OS Build 21996.1任务栏 Windows 11 任务栏上的“开始”菜单和应用程序图标由此前 Windows 操作系统中的“左对齐”样式变为“居中”。如果你不喜欢“居中”可以通过个性化设置更改…

数学建模,还得这样学!

最近天气逐渐晴朗回温(伊芙布德干内库毛德川状态暂时告一阶段),数学建模的热度也在逐步回温(据说大家开始了数学建模知识储备),常有小伙伴私聊小天咨询关于数学建模的事情。春节假期也已经过去,…

测试Live Writer 发表博客

2019独角兽企业重金招聘Python工程师标准>>> 测试成功!!! 转载于:https://my.oschina.net/bonelwh/blog/125845

WPF 菜单栏滚动到顶部后固定的两种方法

最近项目中有这么个需求:菜单栏滚动到顶部后固定在顶部,专业的名词叫吸顶。。这在移动端还是比较常见的。看看效果:下面直接看看代码喽,代码不多:第一种方法思路:写一个和菜单一模一样的菜单,放…

eeprom 数据偶尔变成ff_关于水电站冗余配置下监控系统下发调节令偶尔不动作的案例分析...

点击上方“E小水电”,“星标或置顶公众号”关键时刻,第一时间送达摘要:吉勒布拉克水电站冗余配置下机组PLC组网运行,后台监控系统下发调节令,调节不动作或偶尔动作现象分析。引言吉勒布拉克机组自动化控制为冗余主备双…

美国明确警告德国,3G退网5G手机不需要换号,抽烟酗酒学生不能认定为家庭经济困难,大学食堂凭运动步数打折,这就是今天的大新闻。...

今天是3月13日农历二月初七今天星期三一切都风平浪静下面是今天的大新闻美国明确警告德国放弃华为(环球新闻)7日,德国经济部长彼得•阿尔特迈尔(PeterAltmaier)明确表态,德国不想将华为排除在本国5G建设外。随后,这位部…

【bayes】贝叶斯likelihood和model

1)Likelihood 最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。 简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均…

abb限位开关已打开drv1_广告雕刻机限位开关触发

广告雕刻机限位开关触发?广告雕刻机是指专门用于广告行业的设备,是专门为广告而研发的设备。广告雕刻机当然也可以用于其他行业,例如工艺品行业、家具行业、模型行业等。今天我们重点说下“广告雕刻机限位开关触发”。市面上常见的PVC字广告雕…

有趣的灵魂,从高质量的阅读开始

王小波说:我活在世上,无非想要明白些道理,遇见些有趣的事,倘能如我所愿,我的一生就算成功。如果不能行万里路,那就从阅读一篇文章开始。不积跬步,无以至千里。不积小流,无以成江海。…

面向.NET开发人员的Dapr——俯瞰Dapr

目录:面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界Dapr at 20,000 feet俯瞰DaprIn chapter 1, we discussed the appeal of distributed microservice applications. But, we also pointed out that they dramatically increase architectu…