python爬虫之多线程爬虫

本文介绍了Python的多线程技术,通过实例展示了如何创建和使用线程,包括线程介绍、自定义线程类、共享变量问题的解决、生产者消费者模式的Lock和Condition版,以及Queue安全队列的使用,旨在帮助理解多线程在爬虫中的应用。
摘要由CSDN通过智能技术生成

多线程

1.多线程介绍

如果我们把CPU比作一个工厂,这个工厂里面有多个车间,每一个车间就是一个进程;每一个车间有多个工人,每一个工人就是一个线程。我们之所以要学习多线程就是为了在同一时间里完成多项任务。

python中的多线程使用的是threading模块。

我们来看下面的一个例子,

import time


def drinking():
    for x in range(3):
        print("正在喝啤酒:%s" % x)
        time.sleep(1)


def eating():
    for x in range(3):
        print("正在吃小龙虾:%s" % x)
        time.sleep(1)


def main():
    drinking()
    eating()


if __name__ == '__main__':
    main()

执行结果如下,

正在喝啤酒:0
正在喝啤酒:1
正在喝啤酒:2
正在吃小龙虾:0
正在吃小龙虾:1
正在吃小龙虾:2

我们可以发现系统会在drinking()执行完毕后再执行eating(),如果我们要同时执行drinking()和eating()就需要使用多线程的方式进行了。例如,

import threading
import time


def drinking():
    for x in range(3):
        print("正在喝啤酒:%s" % x)
        time.sleep(1)


def eating():
    for x in range(3):
        print("正在吃小龙虾:%s" % x)
        time.sleep(1)


def main():
    t1 = threading.Thread(target=drinking)  # 创建线程并且指定目标
    t2 = threading.Thread(target=eating)

    t1.start()  # 开启线程
    t2.start()


if __name__ == '__main__':
    main()

执行结果如下,

正在喝啤酒:0
正在吃小龙虾:0
正在吃小龙虾:1
正在喝啤酒:1
正在喝啤酒:2
正在吃小龙虾:2

在上例中,我们创建了两个Thread对象,Thread对象执行target参数中的方法为执行方法,分别用于执行drinking()和eating(),使用start()方法让线程开始任务。

我们可以看到drinking()和eating()同时执行。

2.自定义线程类

我们可以自定义一个类继承于threading.Thread类。threading.Thread类中的run()方法是当创建Thread对象的时候,如果没有传入target参数,则会执行run()方法中的代码。因此,我们需要对run()方法进行重写。

我们使用自定义线程类的方式重写上例,

import threading
import time


class D
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值