python3单线程 多线程 多进程 异步协程速度对比

上周刚学习了python的多线程,这周写个速度对比测试一下,也是我的博客园第一篇文章

算是一次不太合格的关于python多线程的文章,不过当做对于我上周学习的总结和实践,我还是满意的

代码都放在了https://github.com/robzza/python  这里

爬取的地址是  http://www.xinfadi.com.cn/

通过url分析页面很简单,第一页是list/1  一直到最后一页list/15525

http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml

http://www.xinfadi.com.cn/marketanalysis/0/list/15525.shtml

通过列表生成器加上for循环就能得到所有的url地址,没反爬,连 user-agent都不用添加

 

分析下我们内容存储的数据

都在td标签内,需要注意的一点是tbody标签是谷歌浏览器自动添加的,通过requests返回的是没有的

第一个tr标签是标题,所以用[1:]取除去第一个后面的内容

先爬取到一页的数据,恩,没问题,然后通过for循环替换url获取每页的数据:

由于时间关系,就只获取了前1000页数据,

一页20条内容,1000页就是20000加上第一行的标题,20001,没问题的

单线程花了快587秒,接近10分钟,太慢了

50线程的多线程只要了134秒,快了5 倍。下面我们加大线程试试,200线程

恩,发包很快,但是卡很久了,感觉肯定是要比50线程还慢,对相同的网址要等他返回,单纯加大线程并不能让速度变快

我还手动访问连接测试了下是不是发包太快ban ip了,很久没返回,不等了,减到100线程再试

100秒,还是能快点

下面是多进程,python真是太棒了,多线程和多进程的语法完全一样,只需要把

ThreadPoolExecutor()改成ProcessPoolExecutor()就能使用多进程了

119秒,再试一次

55秒-------------------------八嘎

这怎么比啊,那是不是我前面多线程的在重新试试两次也能再快点,那跑3次,取最快的一次,都是50线程/进程

两次35s,一次55s,取最快的35s

根据目标网站网速使用合适的线程,过大的线程只会让速度更慢

下面是协程

而且鬼校园网一大批量发包就掉线,跑1000页的协程每次点开始我就断网

协程就跑100页的吧

由于受网络波动影响较大,所以起的是个人总结,不能做速度方面的对比

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值