python3爬虫中多线程进行解锁操作实例


Posted in Python onNovember 25, 2020

生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开。同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令。但是鉴于我们实际运用中,因为线程和指令不会只有一个,如果全部都进行lock操作就会出错。所以今天小编为大家进行lock的全面讲解,同时为大家带来lock的解锁方法。

由于线程之间随机调度,所以在使用共享变量时,某线程可能在执行n条后,CPU接着执行其他线程,很容易使得最终结果出错。为了多个线程同时操作一个内存中的资源时不产生混乱,我们可以使用锁。

Lock(指令锁)是可用的最低级的同步指令。Lock处于锁定状态时,不被特定的线程拥有。Lock包含两种状态——锁定和非锁定,以及两个基本的方法。

当线程请求锁定时,其他线程就不能获得这把锁,直到锁定的线程释放锁,其他线程才能继续使用。这就好比使用独卫,某个人进去了,把门锁上了,另一个人必须等待里面的人出来才能继续使用。

指令锁只能被同一个线程调用一次,如果需要多次请求,则需要了解一下可重入锁。

RLock(可重入锁)是一个可以被同一个线程请求多次的同步指令。RLock使用了“拥有的线程”和“递归等级”的概念,处于锁定状态时,RLock被某个线程拥有。拥有RLock的线程可以再次调用acquire(),释放锁时需要调用release()相同次数。

具体方法如下:

acquire([timeout]): 请求获得锁定。使线程进入同步阻塞状态。

release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。

关于线程的锁的案例,这里给出一个简单的指令锁的示例,主要看下锁的作用。

import threading
sub = 0
num = 1000000
lock = threading.Lock()
def add():
  global sub,num
  for i in range(1,num):
    # 请求锁
    lock.acquire()
    sub += 1
    # 释放锁
    lock.release()
def red():
    sub -= 1
def main():
  print("开始运算,sub的值为{}".format(sub))
  t1 = threading.Thread(target=add,args=())
  t2 = threading.Thread(target=red,args=())
  t1.start()
  t2.start()
  t1.join()
  t2.join()
  print("结束运算,sub的值为{}".format(sub))
if __name__ == '__main__':
main()

有锁时,肯定是交替执行加减算法,但最后结果肯定还是可以为0。

python3爬虫中多线程进行解锁操作实例

注释锁后,再来看下结果。

python3爬虫中多线程进行解锁操作实例

再多执行几次后,会发现结束运算后的sub值每次都不一样,这其实就是因为共享变量,线程之间产生了混乱,导致sub的值无法确定。

以上就是python3爬虫中多线程进行解锁操作实例的详细内容,更多关于python3爬虫中多线程如何进行解锁操作的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中使用中文的方法
Feb 19 Python
Python中的Numpy入门教程
Apr 26 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
python reverse反转部分数组的实例
Dec 13 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 #Python
python 基于wx实现音乐播放
Nov 24 #Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 #Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 #Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 #Python
python爬虫快速响应服务器的做法
Nov 24 #Python
PyCharm Community安装与配置的详细教程
Nov 24 #Python
You might like
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
使用Django清空数据库并重新生成
2020/04/03 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
python中pop()函数的语法与实例
2020/12/01 Python
css3学习心得分享
2013/08/19 HTML / CSS
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
学校周年庆活动方案
2014/08/22 职场文书
2014年仓库工作总结
2014/11/20 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
python关于集合的知识案例详解
2021/05/30 Python
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
Redis实现订单过期删除的方法步骤
2022/06/05 Redis