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单线程 多线程 多进程 异步协程速度对比的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门