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程序中使用Cookie的教程
Apr 30 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
python程序变成软件的实操方法
Jun 24 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
基于Tensorflow高阶读写教程
Feb 10 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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
数据库相关问题
2006/10/09 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python有几个版本
2020/06/17 Python
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
小区门卫值班制度
2014/01/24 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
学校端午节活动总结
2015/02/11 职场文书
经营目标责任书
2015/05/08 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
如何利用python实现列表嵌套字典取值
2022/06/10 Python