L14_多线程爬虫

多线程基本介绍

有很多场景中的事是同时进行的,比如开车的时候手和脚共同来驾驶汽车,再比如唱歌跳舞同时进行


如何创建线程

· 方法一:通过函数

   使用 threading 模块中的Thread类, 在这个类中有一个target参数需要传递一个函数对象。而这个函数内,就是多线程的逻辑

 · 方法二:通过类的方式

    创建一个类,当时这个类需要基础threading.Thread。并实现(重写) run()方法。在 run() 方法中实现多线程的逻辑

主线程和子线程的执行优先级

· 主线程会等待子线程结束之后再结束

· join(),等待子线程全部结束后,主线程序才继续执行


· setDaemon() 守护线程,不会等待子线程结束,主线程先行结束

程序中模拟多任务

验证子线程的执行与创建

当调用Thread的时候,不会去创建线程

当调用Thread创建出来的实例对象的start方法的时候,才会创建线程以及开始运行这个线程

enumerate()用来查看当前活动线程的数量


线程间共享全局变量

在一个函数中,对全局变量进行修改的时候,是否要加global要看是否对全局变量的指向进行了修改,如果修改了指向,那么必须使用global,仅仅是修改了指向的空间中的数据,此时不用必须使用global, 线程是共享全局变量的

线程间的资源竞争

一个线程写入,一个线程读取,如果两个线程都写入呢?

互斥锁和死锁

· 互斥锁

当多个线程几乎同时修改一个共享数据的时候,需要进行同步控制

某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其它线程不能改变。

只到该线程释放资源,将资源的状态变成“非锁定”,其它的线程才能再次锁定该资源。

互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

创建锁

mutex = threading.Lock()

锁定

mutex. acquire()

解锁

mutex.release()

  · 死 锁

    在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁

· 通过Threading.Lock()创建的锁是不可重复的锁

  也就是mutex.acquire()  与mutex.release()是成对出现的。

  不能出现 mutex.acquire() 后又重复跟了一个 mutex.acquire()

· 避免死锁

  · 程序设计时要尽量避免

  · 添加超时时间

Queue 线程

在线程中,访问一些全局变量,加锁是一个经常的过程。如果是想把一些数据存储到某个队列中,那么python内置了一个线程安全的模块叫做queue模块。

python 中的queue模块中提供了同步的、线程安全的队列类,包括FIFO(进先出)队列)队列Queue,

LIFO( 先入后出 )队列LifoQueue

这些队列都实现 了锁原语(可以理解为原子操作,要么不做,要么都做完),能够在多线程中直接使用。可以使用队列来实现线程间的异步


生产者和消费者

生产者和消费者模式是多线程开发中常见的一种模式。通过生产者和消费者模式,可以让代码达到高内聚低耦合的目标,线程管理更加方便,程序分工更加明确。

生产者的线程专门用来生产一些数据,然后存放到容器中(中间变量)。消费者在从这个中间的容器中取出数据进行消费

Lock版生产者与消费者示例:

Condition版的生产者和消费者示例:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容