python异步协程和多线程问题

毕设港湾 论文问答 1

在一次用爬虫查取的过程中,我有约三百条信息需要爬取。于是我写了异步协程和多线程线程池两种方式。

由于查询需要查询权限,我首先用了request库进行模拟登陆,登陆后得到token然后加入到请求头以通过验证。

异步协程:使用aiohttp库,没有限制信号量,三百条请求同时发送,但是前几十条数据都会返回“用户教研操作权限异常,请稍后再试”的提示,后面的数据全部正常。我尝试降低数据查询量,发现基本前十分之一的数据都会出现该情况。当我查询的并发数量降到五十左右的时候,基本不会出现该情况。于是我在线程中加入了如果查询失败则休息3秒重新查询。会发现前期查询失败的线程再休息三秒后重新查询则没有问题。给人的感觉像是服务器没有反应过来的感觉。(另外要说的是,前几天的异步协程在高并发的时候并未出现此问题)

多线程:使用request库,用线程池的模式直接同时开启四百个线程。同时并发。一切正常。。

那么问题来了。同样是高并发,request库一切正常,aiohttp却会部分报错。那请问这是服务器的问题还是库的问题,是aiohttp库还不够完善的原因么?

回复

共1条回复 我来回复
  • 毕设驿站
    这个人很懒,什么都没有留下~
    评论

    aiohttp的高并发用了协程,而request+线程只是多线程,这个不一样。理论上是aiohttp速度比request+线程的快,但爬虫太快很容易被反爬

    0条评论

发表回复

登录后才能评论