高性能异步爬虫之进程池
高性能异步爬虫目的:实现高性能的数据爬取操作。
异步爬虫的方式
-
多线程,多进程(不建议):
·好处:可以为相关阻塞的操作单独开启线程或进程,阻塞操作可以异步执行。
·弊端:无法无限制的开启多线程或多进程 -
线程池、进程池:
·好处:我们可以降低系统对进程或线程创建和销毁的一个频率,从而很好的降低系统的开销
·弊端:池中线程或进程的数量是有上限的
普通爬虫与异步爬虫(进程池)的比较
普通爬虫
import time
"""
模拟单线程串行,
"""
# 模拟爬虫发送请求操作
def get_page(str):
print(str,"开始下载")
# 模拟阻塞操作
time.sleep(2)
print(str,"下载结束")
name_list=["aa",'bb','cc','dd']
# 记录开始请求时的时间
start_time=time.time()
for i in range(len(name_list)):
get_page(name_list[i])
# 记录一共用时
print("一共用时",time.time()-start_time)
结果
用时8秒
异步爬虫(线程池)
pip install multiprocessing -i ttps://pypi.tuna.tsinghua.edu.cn/simple/
import time
#导入线程池模块
from multiprocessing.dummy import Pool
"""
模拟线程池发送请求
"""
# 模拟爬虫发送请求操作
def get_page(str):
print(str,"开始下载")
# 模拟阻塞操作
time.sleep(2)
print(str,"下载结束")
name_list=["aa",'bb','cc','dd']
# 记录开始请求时的时间
start_time=time.time()
# 实例化一个线程池对象
# 数量为4,可以同时进行4个请求
pool=Pool(4)
# 将请求函数和列表放入线程池中
pool.map(get_page,name_list)
# 记录一共花费时间
print("一共用时",time.time()-start_time)
结果
一共用时2秒