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...\033[0m")

        elif count > 10:

            event.set()  # 绿灯,设置标志位

            count = 0

        else:

            print("\33[42;1mgreen light is on...\033[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爬虫中的各种线程,在主线程的带领下能够有序的进行运转,这也是多线程中不易出错的原因之一其它多线程模块讲解还在持续更新,小伙伴们可以留意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值