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

2021/4/27 7:29:10

本文主要是介绍python3单线程 多线程 多进程 异步协程速度对比,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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

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

爬取的地址是  http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml

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

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

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

下面是协程

 

跑协程的时候网站访问变得非常慢,卡半天css样式都加载不出来,恩,就这样吧

协程就跑100页的吧

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

 



这篇关于python3单线程 多线程 多进程 异步协程速度对比的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程