高性能异步爬虫
目的:在爬虫中使用异步实现高性能的数据爬取操作
异步爬虫的方式:
-多线程,多进程(不建议):
好处:可以为相关阻塞的操作单独开启线程或者进程,阻塞操作旧可以异步执行。
弊端:无法无限制的开启多线程或者多进程。
-线程池、进程池(适当的使用):
好处:我们可以降低系统对进程或者线程创建和销毁频率,从而很好的降低系统的开销。
弊端:池中线程或进程的数量是有上限。
1、使用单线程串行方式执行
1 import time 2 #使用单线程串行方式执行 3 4 def get_page(str): 5 print("正在下载:",str) 6 time.sleep(2) 7 print("下载成功:",str) 8 9 name_list=[‘xiaozi‘,‘aa‘,‘bb‘,‘cc‘] 10 11 start_time=time.time() 12 13 for i in range(len(name_list)): 14 get_page(name_list[i]) 15 16 end_time=time.time() 17 18 print(‘%d second‘%(end_time-start_time))
执行结果如下:
2、使用线程池方式执行
1 import time 2 #导入线程池模块对应的类 3 from multiprocessing.dummy import Pool 4 #使用线程池方式执行 5 start_time=time.time() 6 def get_page(str): 7 print("正在下载:",str) 8 time.sleep(2) 9 print("下载成功:",str) 10 11 name_list=[‘xiaozi‘,‘aa‘,‘bb‘,‘cc‘] 12 13 #实例化一个线程池对象 14 pool=Pool(4) 15 #将列表中每一个列表元素传递给get_page进行处理 16 pool.map(get_page,name_list) 17 18 end_time=time.time() 19 print(end_time-start_time)
执行结果:
可以明显看出,使用线程池的方式大大提高执行效率
原文:https://www.cnblogs.com/industrial-fd-2019/p/14413156.html