异步爬虫之多线程与线程池的区别

异步爬虫的方式:

- [1] 多线程、多进程

优点:可以为相关的阻塞单独开启,然后就可以异步执行
缺点:无法无限制的开启

- [2] 线程池、进程池

优点:降低他的消失频率
缺点:池中的进程有上限

那么我的建议就是使用第二种方式,很方便也很好理解。

下面有两个例子供欣赏:
第一个就是使用的是单线程方式:

#导入模块,需要记录时间问题
import time
#定义一个函数
def get_page(str):
    print("正在下载:",str)
    time.sleep(1)
    print("下载成功:",str)
#下载的内容
name_list = ['王水','文胸','江毛','半斤']
#记录当前时间
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))
#使用的是单线程方式

结果如下图所示,由于我设置了时间上面的对比,需要4s

第二个就是进程池了,很快的只需要1s

#使用线程池来测试
#导入模块,需要记录时间问题
import time
from multiprocessing.dummy import Pool
#记录当前时间
start_time = time.time()
#定义一个函数
def get_page(str):
    print('正在下载:',str)
    time.sleep(1)
    print('下载成功:',str)
#下载的内容
name_list = ['王水','文胸','江毛','半斤']
#初始化一个线程池对象,为什么是4呢,里面有四个线程呀
pool = Pool(4)
#将列表里面的内容传递参数给函数,没有返回值
pool.map(get_page,name_list)
end_time = time.time()
#看看耗时多长
print('%d second'% (end_time-start_time))

结果如下图所示,注释也在代码上面写清楚了,一起下载,堵塞情况下,很适合。

欧克,点个赞在离开

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值