python用gevent实现异步

在处理文件IO和网络IO时,为提高效率,可以采用异步方式。文章以爬虫为例,说明了在批量处理文件或爬取网页如微博数据时,由于大部分时间消耗在网络IO上,故引入gevent进行异步处理。gevent通过monkey_patch改变标准库,将阻塞式系统调用转换为协程,从而实现高效的并发操作。同时提醒在多进程与gevent结合使用时需要注意DNS解析的限制问题。
摘要由CSDN通过智能技术生成

实际工作中,往往会使用碰到文件io或者网络io。
批处理大量文件或者做爬虫,如果使用同步的方式,大量时间都会消耗在io的等待上,尤其是网络IO,包括建立socket,下载,这个很大程度上取决于网络环境,比如我们去网上爬取一些图片做一些图像处理的训练啊等等。爬取后执行的动作耗时其实很短,90%的时间都耗在网络IO上了,我们就要考虑异步了。
比如我们爬取人人网,微博等平台的资料,因为大家的首页都是固定的url+id,
比如微博
https://weibo.com/u/1669879400?is_hot=1这个是迪丽热巴的微博首页
https://weibo.com/u/1669879410?is_hot=1这是某未知用户的微博首页
首页有粉丝和关注数,比如我要获取大量样本的粉丝和关注数,我可以遍历id去拿数据。当然微博这种平台肯定做了反爬取的,下面的代码也没带session,是访问不通的。这里只是做个例子,大家千万不要尝试,要查水表的。
最简单的异步就是使用gevent, 这里的monkey是用来改变标准socket库的。当一个库需要修改Python本身 的基础行为的时候,monkey就派上用场了。gevent能够 修改标准库里面大部分的阻塞式系统调用,包括socket、ssl、threading和 select等模块,而变为协程。但使用使用要注意多进程和gevent并用时,dns解析有一定限制,详见

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值