python3 threading.lock_python3爬虫lock如何有序的处理多线程?
大家肯定在快递很多的时候,在混乱的快递堆里找寻过自己的包裹,其中的困难小编也非常有感悟。同样我们在运行程序时,更倾向于得到排列整齐的结果,这对我们对于数据结果的整理也比较方便。在多线程中就有lock这样的函数,可以帮助我们把数据运行结果清晰的排列出来,那么具体的用法大家一起往下寻找吧。
第一个线程处理好了,结果传递给第二个线程,那么需要“锁住“第一个线程。同时需要共享的内存shared memory。
如果不加任何lock:# 不加任何处理,同时运行两个线程
import threading
def job1():
global A
for i in range(10):
A += 1
print("Job1 : ", A)
def job2():
global A
for i in range(10):
A += 10
print("Job2 : ", A)
A = 0 # global variable
t1 = threading.Thread(target=job1)
t2 = threading.Thread(target=job2)
t1.start()
t2.start()
t1.join()
t2.join()
运行结果Job1 : 1
Job1 : 2
Job1 : 3
Job2 : 13Job1 :
Job2 : 24
Job2 : 34
Job2 : 44
Job2 : 54
Job2 : 64
Job2 : 74
Job2 : 84
Job2 : 94
Job2 : 104
14
Job1 : 105
Job1 : 106
Job1 : 107
Job1 : 108
Job1 : 109
Job1 : 110
这两个线程会同时运行,且打印还比较乱。如果我想先结束job1,再进行job2,那么使用lock——定义一个全局变量lock,同时在每个job中传入lock。从而两者运行就不会相互影响。
加上lockdef job1():
global A, lock
# 传入全局变量lock,同时通过acquire上锁,通过release解锁。
lock.acquire()
for i in range(10):
A += 1
print("Job1 : ", A)
lock.release()
def job2():
global A, lock
lock.acquire()
for i in range(10):
A += 10
print("Job2 : ", A)
lock.release()
lock = threading.Lock()
A = 0 # global variable
t1 = threading.Thread(target=job1)
t2 = threading.Thread(target=job2)
t1.start()
t2.start()
t1.join()
t2.join()
运行结果Job1 : 1
Job1 : 2
Job1 : 3
Job1 : 4
Job1 : 5
Job1 : 6
Job1 : 7
Job1 : 8
Job1 : 9
Job1 : 10
Job2 : 20
Job2 : 30
Job2 : 40
Job2 : 50
Job2 : 60
Job2 : 70
Job2 : 80
Job2 : 90
Job2 : 100
Job2 : 110
通过上面两个案例的对比,我们可以清楚的看出使用lock函数后,输出的结果是按顺序整齐的排列下来的,比第一个结果看起来不要方便太多了,是不是非常好用呢?更多Python学习指路:PyThon学习网教学中心。
python3 threading.lock_python3爬虫lock如何有序的处理多线程?相关推荐
- python3 threading.lock_Python3 threading
threading 对 _thread(py2为thread),进行了封装. 第一种: 把需要运行的函数传入到 Thread实例中 来执行, 第二种 自己写一个thread class,直接从Thre ...
- 【Python3】【爬虫】meizituSpider
meizituSpider 抓取了meizitu萌妹板块的照片,基于BeautifulSoup4. 环境: 1.python3.6 2.pip install requests 3.pip insta ...
- 关于使用Python3进行网络爬虫的字符问题
使用Python3进行网络爬虫的时候,对于某一些网页,使用utf-8编码是没有问题的.比如: import urllib.request url = "https://www.baidu.c ...
- 爬取妹子图(python):爬虫(bs+rq)+ gevent多线程
爬取妹子图(python):爬虫(bs+rq)+ gevent多线程 简介 我观察爬取妹子图算是爬虫专业户必做的事情之一,所以我也做了一个,结果是有3.45GB,49847张图. 打算依靠这个图库做个 ...
- python 线程超时设置_爬虫基础知识(一)多线程与threading模块
点击上方"蓝字"关注我们,第一时间推送优质文章! 前言 "本期带来的文章是python中多线程与threading模块的主要内容.主要分为「并发与并行」,「进程与线程」, ...
- python3线程gil_python3爬虫GIL修改多线程实例讲解
我们打开程序后,会发现电脑的内存和cpu发生了变化.在对于前者上面,自然是希望内容占用小,cpu的利用越高越好.那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的 ...
- 爬虫python代码-一则python3的简单爬虫代码
不得不说python的上手非常简单.在网上找了一下,大都是python2的帖子,于是随手写了个python3的.代码非常简单就不解释了,直接贴代码. 代码如下: #test rdp import ur ...
- Python3 threading的多线程管理中的线程管理与锁
提到Python的多线程,大家都说鸡肋.至于为什么,一定又要说什么"GIL的全称是Global Interpreter Lock(全局解释器锁)"之类的解释了,哥书读的少,听不太懂 ...
- python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...
不管线程行为是否在python版本之间发生了变化,在没有使用锁的情况下,在多个非同步线程上递增num的行为充其量是不确定的.即使在同一台PC机上对同一个解释器进行多次运行,也可能产生不同的结果.因为您 ...
最新文章
- PTA ---结构错题汇总
- 图像分类和目标检测技术有什么区别?
- 数据降维工具箱drtoolbox
- 网易云信联手神州信息,金融视频营业厅被央视点赞
- 查询mysql视图_MySQL数据库简介及常用命令
- 更改应用程序图标_苹果更新 TestFlight 应用图标,增加更多拟真细节
- CSS-解决inline-block空隙的最好方法
- IPXX防护等级中关于防水实验的规定
- 在Linux下群ping脚本,Linux下使用screen和ping命令对网络质量进行监控
- Java入门学习笔记——郝斌(三)线程
- 5G 智能融合城域网特点与组网方案
- 微信多开无法连接服务器,ios丨微信多开联网失败解决方法
- TLE 生成 Cesium CZML 卫星轨道数据
- 北大沙龙 | 技术大咖为大家讲解什么是UTXO
- PaddleFL 1.2.0版本 使用docker镜像编译流程(Ubuntu 20.04)
- windows下VS中各种C++库的集成
- QT教程 休闲棋牌游戏开发(2)
- 抖音素材哪里下-抖音素材哪里找-短视频素材库
- OP-TEE基本的从芯片设计到给客户的安全问题浅析
- 项目负责人的心得体会
热门文章
- 安卓学习笔记42:基于HTTP网络编程
- Python学习笔记:利用sorted()函数对序列排序
- 吴军《谷歌面试题:倒置英文句子》
- Scala案例:词频统计
- 【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线
- java 返回js,Javascript返回上一页
- drop 很慢 物化视图_物化视图问题-效率捉摸不定
- python requirements.txt_python_requirements.txt使用
- 2017.9.13 序列统计 思考记录
- 【英语学习】【WOTD】farouche 释义/词源/示例