首页 技术 正文
技术 2022年11月12日
0 收藏 673 点赞 4,814 浏览 992 个字

并行化

Hawk支持单机并行化,也就是使用多线程获取数据。它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务。

你可以在数据清洗的 执行面板中,选择串行和并行模式:
Hawk 4.6 并行化

在调试模式下,所有获取都是串行的。而执行模式下,执行器才会执行。为了更好地理解并行化,强烈建议阅读下面的内容。

最简单的并行化

我们以抓取某个网站的100个页面为例,第一个模块生成区间数,可以生成1-100的页面,自然地,就可以创建100个任务,分别抓取了。

Hawk 4.6 并行化

Hawk在默认情况下,会以本流程的第一个模块生成的元素数量,作为创建任务的数量。

但是,但如果队首的生成器只生成了很少的元素,每个元素在后期,又会转换为大量的元素,那么这种方法就非常低下了。极端情况下队首生成器只生成一个元素,则并行化就毫无意义:

Hawk 4.6 并行化

改进的并行

一种非常简单的思路,是将其切成两个流,并行在流中完成。

Hawk 4.6 并行化

我们将其看成两个流,第一个流,负责产生出一堆种子任务出来,并加入到任务队列,之后再在这些任务的基础上,再分别调用第二个流。

如何切分流?取决于你在流中插入的并行的位置。这个位置就是切分为两个流的“切割点”。

以大众点评为例, 北京有14个区县,有30种美食类型,如果直接在区县后插入并行,则只有14个子任务,任务数量太少:那么先通过流1,获取420个元素,再以420个元素的基础上,插入并行,这样速度就快很多了。你也可以在14个区县之后插入并行化,那么就有14个子任务

反过来,如果每个任务的工作量太少,比如只访问一次网站内容,则这样的种子创建并行就显得过分地成本高昂,因此可以填写分组并行数量,比如10,那么Hawk就会以10个元素为一组,创建任务。

Hawk 4.6 并行化

监控任务执行情况

任务管理器中,可以显示任务的名称,以及进度。这样可以方便监控。

子线程名称和子线程数量,都支持直接写值,或使用方括号表达式来获取别的列的内容。例如,如果你确定每个子任务都会获取100条数据,就可以在子线程数量中填写100,之后当该任务获取了50个元素时,进度条正好处在50%的位置。如果有一列名为“小区名”, 则可以在子线程名称栏目中填写[小区名] ,Hawk就会把小区名列中的内容作为子任务的名称。

任务管理

你可以随时在执行过程中,暂停或取消所有任务。

Hawk 4.6 并行化

五个按钮依次为:全选,反选,暂停,启动,删除。

你可以不告诉Hawk子任务的名称,那么它就是默认值。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297