在一次用爬虫查取的过程中,我有约三百条信息需要爬取。于是我写了异步协程和多线程线程池两种方式。
由于查询需要查询权限,我首先用了request库进行模拟登陆,登陆后得到token然后加入到请求头以通过验证。
异步协程:使用aiohttp库,没有限制信号量,三百条请求同时发送,但是前几十条数据都会返回“用户教研操作权限异常,请稍后再试”的提示,后面的数据全部正常。我尝试降低数据查询量,发现基本前十分之一的数据都会出现该情况。当我查询的并发数量降到五十左右的时候,基本不会出现该情况。于是我在线程中加入了如果查询失败则休息3秒重新查询。会发现前期查询失败的线程再休息三秒后重新查询则没有问题。给人的感觉像是服务器没有反应过来的感觉。(另外要说的是,前几天的异步协程在高并发的时候并未出现此问题)
多线程:使用request库,用线程池的模式直接同时开启四百个线程。同时并发。一切正常。。
那么问题来了。同样是高并发,request库一切正常,aiohttp却会部分报错。那请问这是服务器的问题还是库的问题,是aiohttp库还不够完善的原因么?