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

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 pandas 的list追加问题
  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题