大家肯定在快递很多的时候,在混乱的快递堆里找寻过自己的包裹,其中的困难小编也非常有感悟。同样我们在运行程序时,更倾向于得到排列整齐的结果,这对我们对于数据结果的整理也比较方便。在多线程中就有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如何有序的处理多线程?相关推荐

  1. python3 threading.lock_Python3 threading

    threading 对 _thread(py2为thread),进行了封装. 第一种: 把需要运行的函数传入到 Thread实例中 来执行, 第二种 自己写一个thread class,直接从Thre ...

  2. 【Python3】【爬虫】meizituSpider

    meizituSpider 抓取了meizitu萌妹板块的照片,基于BeautifulSoup4. 环境: 1.python3.6 2.pip install requests 3.pip insta ...

  3. 关于使用Python3进行网络爬虫的字符问题

    使用Python3进行网络爬虫的时候,对于某一些网页,使用utf-8编码是没有问题的.比如: import urllib.request url = "https://www.baidu.c ...

  4. 爬取妹子图(python):爬虫(bs+rq)+ gevent多线程

    爬取妹子图(python):爬虫(bs+rq)+ gevent多线程 简介 我观察爬取妹子图算是爬虫专业户必做的事情之一,所以我也做了一个,结果是有3.45GB,49847张图. 打算依靠这个图库做个 ...

  5. python 线程超时设置_爬虫基础知识(一)多线程与threading模块

    点击上方"蓝字"关注我们,第一时间推送优质文章! 前言 "本期带来的文章是python中多线程与threading模块的主要内容.主要分为「并发与并行」,「进程与线程」, ...

  6. python3线程gil_python3爬虫GIL修改多线程实例讲解

    我们打开程序后,会发现电脑的内存和cpu发生了变化.在对于前者上面,自然是希望内容占用小,cpu的利用越高越好.那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的 ...

  7. 爬虫python代码-一则python3的简单爬虫代码

    不得不说python的上手非常简单.在网上找了一下,大都是python2的帖子,于是随手写了个python3的.代码非常简单就不解释了,直接贴代码. 代码如下: #test rdp import ur ...

  8. Python3 threading的多线程管理中的线程管理与锁

    提到Python的多线程,大家都说鸡肋.至于为什么,一定又要说什么"GIL的全称是Global Interpreter Lock(全局解释器锁)"之类的解释了,哥书读的少,听不太懂 ...

  9. python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...

    不管线程行为是否在python版本之间发生了变化,在没有使用锁的情况下,在多个非同步线程上递增num的行为充其量是不确定的.即使在同一台PC机上对同一个解释器进行多次运行,也可能产生不同的结果.因为您 ...

最新文章

  1. PTA ---结构错题汇总
  2. 图像分类和目标检测技术有什么区别?
  3. 数据降维工具箱drtoolbox
  4. 网易云信联手神州信息,金融视频营业厅被央视点赞
  5. 查询mysql视图_MySQL数据库简介及常用命令
  6. 更改应用程序图标_苹果更新 TestFlight 应用图标,增加更多拟真细节
  7. CSS-解决inline-block空隙的最好方法
  8. IPXX防护等级中关于防水实验的规定
  9. 在Linux下群ping脚本,Linux下使用screen和ping命令对网络质量进行监控
  10. Java入门学习笔记——郝斌(三)线程
  11. 5G 智能融合城域网特点与组网方案
  12. 微信多开无法连接服务器,ios丨微信多开联网失败解决方法
  13. TLE 生成 Cesium CZML 卫星轨道数据
  14. 北大沙龙 | 技术大咖为大家讲解什么是UTXO
  15. PaddleFL 1.2.0版本 使用docker镜像编译流程(Ubuntu 20.04)
  16. windows下VS中各种C++库的集成
  17. QT教程 休闲棋牌游戏开发(2)
  18. 抖音素材哪里下-抖音素材哪里找-短视频素材库
  19. OP-TEE基本的从芯片设计到给客户的安全问题浅析
  20. 项目负责人的心得体会

热门文章

  1. 安卓学习笔记42:基于HTTP网络编程
  2. Python学习笔记:利用sorted()函数对序列排序
  3. 吴军《谷歌面试题:倒置英文句子》
  4. Scala案例:词频统计
  5. 【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线
  6. java 返回js,Javascript返回上一页
  7. drop 很慢 物化视图_物化视图问题-效率捉摸不定
  8. python requirements.txt_python_requirements.txt使用
  9. 2017.9.13 序列统计 思考记录
  10. 【英语学习】【WOTD】farouche 释义/词源/示例