当前位置:
首页 > Python基础教程 >
-
Python3基础之Python线程同步锁
前面一节的案例提出了多线程数据同步所存在的问题,当多个Author线程修改同一个共享数据时,会发生数据覆盖或丢失的问题。
为了解决多个线程修改同一数据而发生数据覆盖或丢失的问题,Python提供了Lock对象来加保护伞,以保证数据的安全。线程调用Lock对象的acquire方法来获取锁对象(如果其他线程已经获得该锁,则当前线程需等待被释放),待资源访问完后,在调用release方法释放锁。
主线程修改代码如下:
上面的代码通过threading模块的lock()方法获取Lock对象,并传入到创建的Author线程里。
Author线程的代码如下:
在Author线程的run()方法中,使用锁对象对content数据进行保护,被加锁的content数据不能被其它线程修改,直至锁对象被释放后,其它线程才能获取该数据的修改权。
程序经过改造后,输出结果如下图所示:
图 1 使用Lock对象后程序输出结果
从输出结果可以看出,创作的内容都获得了输出,这得益于Lock对象对共享数据的保护作用。Lock对象实际上是一个互斥锁,Lock对象应在主线程创建,并在主线程创建的子线程中使用。当子线程需要修改主线程的共享数据时,子线程调用Lock对象的acquire()方法获取锁对象,对共享数据加锁保护,共享数据被加锁后,其它线程将无法获得共享数据的使用权,直至子线程调用Lock对象的release()方法释放锁。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式