Python爬虫--5

本文介绍了异步爬虫中的多线程、多进程以及线程池的使用方法,对比了单线程与线程池在处理阻塞操作上的效果,并给出了实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、异步爬虫

异步爬虫的方式:

(1)多线程,多进程(不建议使用)

        好处:可以为相关阻塞的操作单独开启线程或者进程,阻塞操作就可以异步执行。

        弊端:无法无限制的开启多线程或者多进程。

(2)线程池、进程池

        好处:我们可以降低系统对进程或者线程创建和销毁的一个频率,从而很好的降低系统的开销。

        弊端:池中线程或进程的数量是有上限。

        使用原则:线程池处理的是阻塞且耗时的操作。

2、单线程

# -*-coding = utf-8-*-

import time
from multiprocessing.dummy import Pool

# 线程池使用
if __name__ == '__main__' :

    def get_page(str):
        print("正在下载: ", str)
        time.sleep(2)
        print("下载成功: ", str)

    name_list = ['xiaozi', 'aa', 'bb', 'cc']

    start_time = time.time()

    for i in range(len(name_list)):
        get_page(name_list[i])

    end_time = time.time()
    print("%d second"%(end_time - start_time))

结果为:

3、线程池

# -*-coding = utf-8-*-
# 高性能异步爬虫 - 线程池的使用 示例。

import time
from multiprocessing.dummy import Pool

# 线程池使用
if __name__ == '__main__' :

    start_time = time.time()

    def get_page(str):
        print("正在下载: ", str)
        time.sleep(2)
        print("下载成功: ", str)
        return str

    name_list = ['xiaozi', 'aa', 'bb', 'cc']

    # 实例化一个线程池对象
    pool = Pool(4)
    # 将列表中每一个元素传递给get_page进行处理
    ret = pool.map(get_page, name_list)
    print("map的返回结果:", ret)

    end_time = time.time()
    print("%d second"%(end_time - start_time))

    pool.close()
    pool.join()

结果为:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值