qq_15562363 2021-11-25 21:18 采纳率: 100%
浏览 48
已结题

python异步协程和多线程问题

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

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

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

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

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

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-11-25 21:39
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 创建了问题 11月25日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测