菜单

奇妙的并行问题

2020年2月5日 - 计算机数据
奇妙的并行问题

人名模糊查找,是一个非常寻常的功能。然而用起来发现了一个问题

前一段时间因为一个机会,写了好长一段时间爬虫,不过没有写什么复杂的爬虫,比如说爬微博之类的,主要还是解析HTML。这里主要对我之前的写的东西总结一下。

比方说我有一个人员Table 数据量大概300W。人名那列有索引–这个是背景故事

爬虫说到底其实非常简单,就做两件事情:第一件事情,下载网页;第二件事情,分析下载的网页。当然,如果有其他要求,做起来还是要稍微注意一下的。

然后看下以下这两句,是不是并没有什么卵区别

开发语言

我一直以来用的是python,因为写起来简单,配置也简单。然后我就用python写了各种各样的简单的爬虫,比如爬新闻标题,爬图片,爬商品信息等等。但是最近我在爬取一个购物网站的时候出现了问题,爬取1W条数据花了1个多小时,太慢了,特别是最后分析html,虽然Bs挺好用的,但是确实太慢了。所以我把python换成了java。

金沙国际棋牌下载官网,我发现在下载的时候其实语言差别不大,只要线程足够,是能够把IO跑满的,也就是极限了。这块儿用什么语言无所谓。

金沙国际唯一官网,但是在下载结束后需要缓存下载的页面和分析数据,就有区别了,因为python的全局锁和性能的问题,会发现要多线程分析数据确实写的很蹩脚,前段时间在源创会的时候一个大牛也说到这个,不建议使用python处理大量的CPU并行的业务,效率太低了。

DECLARE @Name NVARCHAR(50)='黄小A'SELECT *  FROM dbo.tb_persons    WHERE pess_fullname LIKE '%'+@Name+'%'SELECT *  FROM dbo.tb_persons    WHERE pess_fullname LIKE '%黄小A%'

流程

写爬虫的时候我是用了生产者-消费者模型,首先下载网页,把网页丢到队列里面,在用一个线程专门储存这些网页,这样有专门下载页面的,有专门储存网页的,也有专门分析的,完全可以并行来做,可以把网络、硬盘、CPU一起全部利用起来,效率会更高。

当然这里面还是要考虑代价的问题,因为我爬取得数量没有太多,只是1W条左右,所以我的程序把分析放在了最后,等爬取网页结束了再分析,这样程序简单,思路也简单,出错也少。

是的!在平时执行的时候,确实没有区别,在300W的数据里面直接秒出结果。然而在存储过程里面就不一样了~

问题

一般爬取网页都是直接解析网页,当然很多时候有一些问题需要解决,因为有些网页是用js生成的,一般说来用js生成的很多都可以找到API直接解析服务器返回的数据,效率会提升好多。当然也可以用webkit库来模拟浏览器解释js,这样的话难度就加大好多:

  1. 效率降低了很多,加载html需要时间,解释js运行也需要时间,要慢将近2个数量级
  2. 多线程多进程使用特别麻烦,因为要多开webkit,并行运行,内存控制很容易出现问题。
  3. 需要等待js执行,需要调试各种bug。
  4. 资源利用不能忍受,经常发现跑10个进程CPU和内存就跑慢了,这是不能忍受的。

当然如果时间来得及,是在PC上跑,可以接受,但是放在服务器上,基本可以换方案了。

所以这里推荐在写爬虫之前先抓抓包,看看有没有什么js在和后台通信,也许这个通信的api就是你想要的。

CREATE PROC Tmp_Proc(  @Name NVARCHAR(50))ASSET NOCOUNT ON;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;SELECT pess_id,pess_fullname  FROM dbo.tb_persons    WHERE pess_fullname LIKE '%'+@Name+'%'GOCREATE PROC Tmp_Proc2ASSET NOCOUNT ON;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;SELECT pess_id,pess_fullname  FROM dbo.tb_persons    WHERE pess_fullname LIKE '%黄小变%'GO

最后

对于爬虫而言,最重要的还是网络环境要好,而且一定要考虑超时的问题,这是爬虫的稳定性所在。当然我也有在想能不能再进一步节省资源,只下载一部分html,这是我下一步可能要做的,如果可以,能够定位,那么性能还会大大提升。

我把我之前的爬虫都放在了Github上了,各位看官有需要的可以自己下载看看。
我的Github

执行起来是不是一样?? NO !

上图,存储过程1执行了接近5S,存储过程2确实正常的50毫秒,怎么会这样呢?

金沙国际棋牌下载官网 1

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图