Python爬虫--5

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))

结果为:

Python爬虫--5_第1张图片

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()

结果为:

Python爬虫--5_第2张图片

你可能感兴趣的:(python共同学习,爬虫,java,服务器)