1. 調試模式和執行模式
1.1.調試模式
系統能夠通過拖拽構造工作流。在編輯流的過程中,處於調試模式,為了保證快速地計算和顯示當前結果(只顯示前20個數據,可在調試的采樣量中修改),此時,所有執行器都不會參與到工作流中,意味着數據庫和數據表都不會被寫入和更新。
(是否記得所有模塊分為 生成,轉換,過濾和執行四類?)
在調試時,從爬蟲轉換模塊可能會請求web數據,為了提升性能,該模塊對請求做了緩存。保證數據只需獲取一次,如果想強制刷新數據,將從爬蟲轉換模塊禁用,再啟用,原始緩存數據就會被擦除。
。
1.2執行模式
只有點擊執行時,才會切換到執行模式。系統會切入到串行/並行模式,並行模式可以設置最大工作線程數,只有之前的工作線程完成工作,才會填入新的任務。
點擊執行后,為了保證執行過程不受干擾,建議不要再修改各個模塊的參數,此時刷新結果不可用。
當你想取消某一個任務,可以在任務管理視圖的任務上,點右鍵選擇取消任務即可。
2. 腳本系統
Hawk可以嵌入Python,以支持精細的控制,實現用圖形界面難以操作的功能。Hawk使用IronPython作為解釋器,其語法和Python3接近。
2.1 在工作流中使用腳本
我們用例子來講解如何使用:
拖入生成區間數,添加一列,列名叫A,范圍為1-20,間隔為1:
再拖入另外一個生成區間數,列名為B,范圍1-40,間隔為2,注意生成模式為Merge。
此處介紹生成模式的區別:
- Merge:橫向混合,形成另外獨立的一列
- Append: 縱向添加,生成新的數據行,跟在后面
- Cross: 笛卡爾集,縱向組合,例如
(A,B) Cross (1,2,3) = A1,A2,A3,B1,B2,B3
- Mix:交叉混合:縱向組合,例如
(A,B,C) Mix (D,E,F)= A,D,B,E,C,F
基本上以上四種情況能足以應付絕大多數情形。
之后,將Python轉換器拖入A列,設置如下:
即可看到,多出了C列,且C=A+B。
腳本里,屬性名可以直接作為變量使用,可以執行所有Python支持的操作。代碼需要有返回值,但不需要return。拖入的列,除了可以用列名引用外,還可以使用value
。當前的數據字典名稱為data
,因此上面的代碼還可以寫為:
data['A']+data['B']
值得注意的是,Python是強類型的語言,因此如果讀入的是文本,上面的代碼就會出錯,應當改為:
int(A)+int(B)
2.2在加載任務時使用腳本
在定制抓取任務時,我們可以在界面上雙擊模塊,修改工作流的參數,如采集不同城市的數據,之后再進行保存。
但這種做法比較麻煩,容易出錯。因此,我們可以在工程文件的同一級目錄放置Python腳本,在加載任務時,腳本會自動執行。
3.單步調試
已經編寫的工作流,可能會因為某些外界環境的變化而出錯,此時需要排除錯誤,我們可以使用單步調試:
還是上面A+B=C的例子:
在屬性對話框,調試窗口里,填寫模塊數量為1,點擊刷新結果,此時,系統會只執行第一步,顯示A列。
點擊單步調試,模塊數量變為2,顯示A和B列。
本質上,單步調試只是提取了工作流的一部分進行操作,你可以在單步調試中,拖入新的模塊。模塊會自動插入在工作流中間。
4.組合多個工作流
有時,不可能把所有的任務都在同一個工作流中實現。如果把工作流拆成不同的子流,那么就能方便重用和組合。
組合子模塊的功能包含三類:子流-執行,子流-轉換和子流-生成。為什么不包括子流-過濾?因為過濾操作通常比較簡單,不需要子流實現。
- 子流-生成,作為生成器,一般在主流的開頭位置。
- 子流-轉換,可看成轉換器,通常位於中間位置。
- 子流-執行:作為執行器,一般位於末尾。
值得指出,子流還可以調用其他的子流,形成樹狀的調用結構。
當加載一個任務時,該任務依賴的子任務也會自動加載。對子流的修改,也會傳遞到主流上。
(未完待續)