栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python3爬虫中如何防止多线程出错?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3爬虫中如何防止多线程出错?

最近的温度已经能感受到寒冬的冷意了,动物们的迁徙也早就完成。那么大家应该知道,为了防止迁徙途中走错路,动物的集体迁徙是有一个领头的,它会带领集体走向更温暖的地带,可能这点平时我们没怎么注意过。这种应用在多线程中也有体现,为了不让其他的线程出现混乱,都会有一个主线程进行控制,这就是领头的作用,接下来让我们看看主线程如何防止其它线程出错吧。


python线程的事件用于主线程控制其他线程的执行,事件是一个简单的线程同步对象,其主要提供以下几个方法:

  • clear 将flag设置为“False”

  • set 将flag设置为“True”

  • is_set 判断是否设置了flag

  • wait 会一直监听flag,如果没有检测到flag就一直处于阻塞状态

事件处理的机制:全局定义了一个“Flag”,当flag值为“False”,那么event.wait()就会阻塞,当flag值为“True”,那么event.wait()便不再阻塞。

#利用Event类模拟红绿灯
import threading
import time
 
event = threading.Event()
 
 
def lighter():
    count = 0
    event.set()     #初始值为绿灯
    while True:
        if 5 < count <=10 :
            event.clear()  # 红灯,清除标志位
            print("33[41;1mred light is on...33[0m")
        elif count > 10:
            event.set()  # 绿灯,设置标志位
            count = 0
        else:
            print("33[42;1mgreen light is on...33[0m")
 
        time.sleep(1)
        count += 1
 
def car(name):
    while True:
        if event.is_set():      #判断是否设置了标志位
            print("[%s] running..."%name)
            time.sleep(1)
        else:
            print("[%s] sees red light,waiting..."%name)
            event.wait()
            print("[%s] green light is on,start going..."%name)
 
light = threading.Thread(target=lighter,)
light.start()
 
car = threading.Thread(target=car,args=("MINI",))
car.start()

 

相信Python爬虫中的各种线程,在主线程的带领下能够有序的进行运转,这也是多线程中不易出错的原因之一其它多线程模块讲解还在持续更新,小伙伴们可以留意。更多Python学习指路:PyThon学习网教学中心。




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/11793.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号