Closed ydf0509 closed 2 years ago
尽管我们表达的不是一个概念。
我测试过。任务形式的线程的上下文切换速度是赶不上异步的。 只是在Python中这个区别看起来并不明显, 如果有兴趣的话可以换c 或者 go 再来测试二者区别
------------------ 原始邮件 ------------------ 发件人: "lixi5338619/asyncpy" @.>; 发送时间: 2021年9月2日(星期四) 下午3:19 @.>; @.***>; 主题: [lixi5338619/asyncpy] nb_http_client + 线程池 性能暴击 asyncio + aiohttp (#2)
线程池 + requests 390次每秒 线程池 + requests 同一个session 420次每秒 线程池 + urllib3 1070次每秒 线程池 + nb_http_client 2500次每秒 asyncio + aiohttp 1480次每秒 线程池 + pycurl 30次每秒
https://github.com/ydf0509/nb_http_client
楼主是否过于迷信了asyncio了,有没有做个精准比较?
爬虫并发用这 https://function-scheduling-distributed-framework.readthedocs.io/zh_CN/latest/articles/c8.html
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.
这个里面有测试源码,asyncio+aiohttp对比nb_http_client+线程池,asyncio速度只有60%左右,你别用requests对比aiohttp,requests是封装的造成cpu高,urllib3+线程池可以达到aiohttp+asyncio的80%,但是nb_http_client+线程池远远超过asyncio+aiohttp。asyncio异步造成代码写法难度高代码怪异,ptyhon爬虫没有必要用异步,不行我可以用 function-scheduling-distributed-framework 线程并发模式对比你的这个异步,请求百度的一个0.1 kb的js文件,看谁先请求完10万次,就知道分布式函数调度框架的线程池快还是你的异步快。
分布式函数调度框架,可一键选择多种并发模式,类似celery框架可以自动使用多种并发模式。
1、抱歉,你对爬虫的认识不够深,并不是发出请求就算爬虫了。如果单纯的为了速度,大可选择其他高效语言,为什么用python来做呢。我一直是以整个任务的执行流程描述的,那么下面我们只看请求效率。
2、我在强调的是线程、异步和协成,你在讲线程池和分布式。这根本就不是一个层级的问题。难道分布式调度只能用于线程池而不能配合异步任务来使用吗。
3、代码写法上只是定义了关键字而已,这也并不是拒绝使用的理由,越来越多的开源项目都在使用asyncio为编程模型。
4、 爬虫是否有必要使用某种请求库,完全是基于场景考虑的,除非爬取一些没有任何防护的麻瓜网站,可以让你尽情的提高速度。
5、看了你的测试代码... 你没有发挥异步并发的优势,其实也不是这么比较性能的,建议再阅读相关资料。
6、最后,我认为你是对的。希望能close问题,不要再回复了。因为每次回复我都需要花费时间看邮件,很耽误工作时间。
7、感谢你的提问和留言。
既然能分布式就可以兼容单机单进程,没说一定要多台机器。是可以可以支持支持async def函数的,支持的是5种并发模式 线程 gevent eventlet asyncio。我只是说asyncio+aiohttp请求完成10万次没有nb_http_client+线程池时间短,我没说只是把10万个请求发出去,是要打印所有response确定完成响应了。 那你要做这个肯定必须出一个和scrapy精准对比的性能结论。
确实是这样,我之后会尝试进行测试,谢谢你的建议。
线程池 + requests 390次每秒 线程池 + requests 同一个session 420次每秒 线程池 + urllib3 1070次每秒 线程池 + nb_http_client 2500次每秒 asyncio + aiohttp 1480次每秒 线程池 + pycurl 30次每秒
https://github.com/ydf0509/nb_http_client
楼主是否过于迷信了asyncio了,有没有做个精准比较?
爬虫并发用这 https://function-scheduling-distributed-framework.readthedocs.io/zh_CN/latest/articles/c8.html