本申請涉及計算機技術領域,尤其涉及代碼異常處理、代碼執行方法及裝置。
背景技術:
隨著計算機技術與軟件業務需求的發展,單個軟件甚至軟件中某個功能的代碼越來越大,這樣對于代碼執行的效率提出了更高的要求。
通常,一個完整的代碼是由若干代碼段組成,所以可以將所述代碼段視為功能模塊,本文中將這樣的代碼段稱之為代碼節點。
現有技術中,在代碼節點出現異常的情況下,代碼執行設備只能從頭開始執行代碼。由此,導致代碼執行效率較低。
技術實現要素:
本申請提供代碼異常處理、代碼執行方法及裝置,以解決現有技術中代碼執行過程中出現異常時從頭開始執行,導致代碼執行效率較低的問題。
根據本申請實施例提供的一種代碼異常處理方法,所述方法包括:
在代碼節點出現異常后,確定與該代碼節點距離最近的持久化代碼節點;其中,所述持久化代碼節點為具有持久化數據的代碼節點;
獲取該持久化代碼節點的持久化數據;
以所獲取的持久化數據作為輸入數據,從所確定的持久化代碼節點后一個代碼節點開始執行。
根據本申請實施例提供的一種代碼執行方法,所述方法包括:
根據預設規則對待執行的代碼進行解析,從而得到所述代碼中每一個代碼節點所屬的依賴關系,所述依賴關系包括流依賴、映射依賴和打亂依賴;
在執行每一個代碼節點后,判斷該代碼節點是否為持久化代碼節點;
如果是,則持久化該代碼節點的輸出數據。
根據本申請實施例提供的一種代碼異常處理裝置,所述裝置包括:
確定單元,在代碼節點出現異常后,確定與該代碼節點距離最近的持久化代碼節點;其中,所述持久化代碼節點為具有持久化數據的代碼節點;
獲取單元,獲取該持久化代碼節點的持久化數據;
執行單元,以所獲取的持久化數據作為輸入數據,從所確定的持久化代碼節點后一個代碼節點開始執行。
根據本申請實施例提供的一種代碼執行裝置,所述裝置應用于代碼執行設備上,所述裝置包括:
解析單元,根據預設規則對待執行的代碼進行解析,從而得到所述代碼中每一個代碼節點所屬的依賴關系,所述依賴關系包括流依賴、映射依賴和打亂依賴;
判斷單元,在執行每一個代碼節點后,判斷該代碼節點是否為持久化代碼節點;
持久化單元,在該代碼節點為持久化代碼節點的情況下,持久化該代碼節點的輸出數據。
本申請實施例中,在代碼執行過程中,通過對持久化代碼節點的輸出數據進行持久化處理,如此后續代碼節點出現異常后,可以獲取距離所述代碼節點最近的持久化代碼節點的持久化數據,以所述持久化數據作為輸入數據,從所述持久化代碼節點后一個代碼節點開始執行。應用本申請實施例中,在代碼節點出現異常后,無需從頭開始執行,從而提高了代碼執行的效率。
附圖說明
圖1是本申請提供的代碼節點拓撲圖;
圖2是本申請一實施例提供的代碼異常處理方法的流程圖;
圖3是本申請提供的代碼節點拓撲圖;
圖4是本申請提供的代碼節點拓撲圖;
圖5是本申請一實施例提供的代碼執行方法的流程圖;
圖6是本申請提供的代碼異常處理裝置所在設備的一種硬件結構圖;
圖7是本申請一實施例提供的代碼異常處理裝置的模塊示意圖;
圖8是本申請提供的代碼執行裝置所在設備的一種硬件結構圖;
圖9是本申請一實施例提供的代碼執行裝置的模塊示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指并包含一個或多個相關聯的列出項目的任何或所有可能組合。
應當理解,盡管在本申請可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。
請參考圖1為某代碼對應的代碼節點拓撲圖,該代碼完整的執行過程為:首先執行a代碼節點,再執行b代碼節點,最后執行c代碼節點。假設a代碼節點的輸入數據為Assembly1。如下為該代碼的執行過程:
開始執行;
執行a代碼節點:對輸入數據Assembly1進行處理后輸出數據Assembly1’,并將Assembly1銷毀;
執行b代碼節點:對輸入數據Assembly1’(即a代碼節點的輸出數據)進行處理后輸出數據Assembly1”,并將Assembly1’銷毀;
執行c代碼節點:對輸入數據Assembly1”(即b代碼節點的輸出數據)進行處理后輸出數據Assembly,并將Assembly1”銷毀;
結束執行。
整個代碼執行完成后最終輸出數據為Assembly。通過上述代碼的執行過程可知,在每個代碼節點執行完畢后都會將輸入數據銷毀。如此,如果代碼執行過程中出現一些異常情況(代碼節點執行錯誤或者數據發生丟失、程序崩潰等),只能從頭開始執行。
為了解決上述問題,本申請實施例提出了一個代碼異常處理方法,參見圖2為本申請一實施例提供的代碼異常處理方法的流程圖,所述方法可以包括以下步驟:
步驟110:在代碼節點出現異常后,確定與該代碼節點距離最近的持久化代碼節點;
本實施例中,一般執行代碼過程中都會開啟異常監測,異常檢測手段是業內常用技術。通常在代碼節點異常會報錯,所述異常可以包括執行錯誤、數據異常(如數據丟失、數據錯誤)、程序崩潰等情況。
在代碼節點出現異常后,代碼執行設備就可以確定與該代碼節點距離最近的持久化代碼節點。其中,所述持久化代碼節點為具有持久化數據的代碼節點。
所述持久化代碼節點用于將輸出數據進行持久化。例如,假設a代碼節點是持久化代碼節點,那么在a代碼節點執行完畢后,可以將所述a代碼節點輸出數據進行持久化。通常,所述持久化數據可以保存在內存中,也可以保存在硬盤中。
以下舉例說明,如圖3所示,某代碼執行需要首先分別執行a代碼節點、b代碼節點,再執行c代碼節點,最后執行d代碼節點;其中c代碼節點為持久化代碼節點。該代碼執行過程中,c代碼節點執行完畢后會持久化輸出數據;如果在執行d代碼節點(當前代碼節點)時出現異常,則獲取距離d代碼節點最近的持久化代碼節點即c代碼節點的持久化數據。
以下詳細介紹所述持久化數據是如何生成的:
在一種可選的實施例中,所述持久化數據通過如下方式生成:
確定代碼節點具有持久化標識的情況下,持久化所述代碼節點的輸出數據。
本實施例中,用戶可以人為預先對代碼節點配置持久化標識,例如某個代碼節點處理數據比較復雜,輸出數據比較重要,那么用戶就可以對該代碼節點配置一個持久化標識;當然用戶也可以對該代碼節點不設置持久化標識,這里只是給用戶增加了一個選項。如此,在代碼執行時,所述代碼執行設備通過判斷所述代碼節點是否具有持久化標識,在確定所述代碼節點具有持久化標識的情況下,持久化所述代碼節點的輸出數據。
在一種可選的實施例中,所述持久化數據通過如下方式生成:
確定代碼節點為最后一個代碼節點的情況下,持久化所述代碼節點的輸出數據。
通過本實施例,默認持久化最后一個代碼節點的輸出數據,如果發生輸出數據丟失的情況,可以快速獲取最后一個代碼節點的持久化數據。
在另一種可選的實施例中,所述持久化數據可以通過如下方式中的至少一種生成:
第一種:確定代碼節點與前一級代碼節點之間為流依賴的情況下,持久化所述代碼節點的輸出數據;
第二種:確定代碼節點與前一級代碼節點之間為映射依賴的情況下,持久化所述代碼節點的輸出數據;
第三種:確定代碼節點與前一級代碼節點之間為打亂依賴的情況下,持久化所述代碼節點的輸出數據。
本實施例中,所述前一級代碼節點是當前代碼節點前并和當前代碼節點有直接聯系的代碼節點。例如,圖3中c代碼節點的前一級代碼節點為a代碼節點和b代碼節點;d代碼節點的前一級代碼節點為c代碼節點;a代碼節點、b代碼節點沒有上一級代碼節點。
所述流依賴:代碼節點的輸入數據只來自一個上一級代碼節點的輸出數據;定義這兩個代碼節點之間為流依賴。如圖3中c代碼節點->d代碼節點,因為d代碼節點的輸入數據只來自c代碼節點的輸出數據,所以可以確定d代碼節點與c代碼節點之間為流依賴。
映射依賴:代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據一一對應輸入數據;定義代碼節點與多個上一級代碼節點之間為映射依賴。如圖3中a代碼節點和b代碼節點->c代碼節點,因為c代碼節點的輸入數據來自a代碼節點和b代碼節點的輸出數;假設c代碼節點的輸出數據不一一對應輸入數據。例如,c代碼節點的輸入數據為姓名、年齡,輸出數據為姓名+年齡,因為輸出數據一一對應輸入數據,所以可以確定c代碼節點與a、b代碼節點之間為映射依賴。
打亂依賴:代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據不一一對應輸入數據;定義代碼節點與多個上一級代碼節點之間為打亂依賴。如圖3中a代碼節點和b代碼節點->c代碼節點,因為c代碼節點的輸入數據來自a代碼節點和b代碼節點的輸出數;假設c代碼節點的輸出數據一一對應輸入數據。例如,c代碼節點的輸入數據為員工考勤(記錄了工號和考勤情況的對應關系)和員工信息(記錄了姓名和工號的對應關系);輸出數據為姓名+考勤,因為需要將兩個輸入數據結合才可以得到姓名+考勤的輸出數據,所以可以確定為c代碼節點與a、b代碼節點之間為打亂依賴。
通過上述三種情況中的任意一種或者組合,都可以實現持久化代碼節點的輸出數據,從而供后續代碼節點發生異常時獲取持久化數據。
如上所述持久化的過程中,對于流依賴、映射依賴和打亂依賴的代碼節點均進行持久化處理。在實際應用中,如果代碼較為復雜或者涉及到的數據量較多的情況下,可能會出現持久化數據過多導致存儲空間不足的問題,特別是當持久化數據存儲在內存中時,那么內存不足會直接影響代碼執行效率。通常,由于流依賴的代碼節點處理數據相對簡單,所以不需要對每個流依賴的代碼節點的輸出數據進行持久化,例如某一個流依賴的代碼節點僅對數據進行傳遞時,完全不需要進行持久化。
針對第一種方式,為了解決上述問題,在一種可選的實施例中:
確定代碼節點與前一級代碼節點之間為流依賴的情況下,輸出配置接口給用戶,以使得用戶可以對該代碼節點設置持久化標識,當然用戶也可以對該代碼節點不設置持久化標識,所以這里只是給用戶增加了一個選項。
在代碼節點具有持久化標識的情況下,該代碼節點的輸出數據需要被持久化。
通過本實施例,對于流依賴的代碼節點,在具有持久化標識的情況下會進行持久化處理,在沒有持久化標識的情況下不用進行持久化處理。如此可以減少持久化數據的產生避免持久化數據過多導致存儲空間不足。
類似地,在實際應用中,由于映射依賴的代碼節點處理數據也相對簡單,所以并不一定需要對每個映射依賴的代碼節點的輸出數據進行持久化。為了防止存儲持久化數據的存儲空間不足,針對第二種方式,在一種可選的實施例中:
確定代碼節點與前一級代碼節點之間為映射依賴的情況下,輸出配置接口給用戶,以使得用戶可以對該代碼節點設置持久化標識,當然用戶也可以對該代碼節點不設置持久化標識,所以這里只是給用戶增加了一個選項。
在代碼節點具有持久化標識的情況下,該代碼節點的輸出數據需要被持久化。
通過本實施例,對于映射依賴的代碼節點,在具有持久化標識的情況下會進行持久化處理,在沒有持久化標識的情況下不用進行持久化處理。如此可以減少持久化數據的產生避免持久化太多數據過多導致存儲空間不足。
如上流依賴或者映射依賴的實施例中,在所述判斷所述代碼節點是否具有持久化標識之后,所述方法還包括:
在所述代碼節點不具有持久化標識的情況下,判斷所述代碼節點是否為最后一個代碼節點;
在所述代碼節點為最后一個代碼節點的情況下,持久化所述代碼節點的輸出數據。
本實施例中,對于流依賴或者映射依賴的代碼節點,如果該代碼節點不具有持久化標識,代碼執行設備進一步可以判斷是否為最后一個代碼節點;如果是最后一個代碼節點,則持久化所述代碼節點的輸出數據。也就是說,即使最后一個代碼節點沒有人為預設的持久化標識,所述代碼執行設備也需要持久化最后一個代碼節點的輸出數據。
通過本實施例,默認持久化最后一個代碼的輸出數據,如果發生輸出數據丟失的情況,可以快速獲取最后一個代碼節點的持久化數據。
步驟120:獲取該持久化代碼節點的持久化數據。
本實施例中,通過步驟110中確定的持久化代碼節點,就可以獲取該持久化代碼節點的持久化數據。
步驟130:以所獲取的持久化數據作為輸入數據,從所確定的持久化代碼節點后一個代碼節點開始執行。
本實施例中,代碼執行設備在確定了距離所述代碼節點最近的持久化代碼節點及獲取了該持久化代碼節點的持久化數據之后,可以以所獲取的持久化數據作為輸入數據,從所確定的持久化代碼節點后一個代碼節點開始執行。
沿用上一步驟中的例子加以說明,在獲取持久化代碼節點c代碼節點的持久化數據后,可以以該獲取的持久化數據作為輸入數據,從所述持久化代碼節點c代碼節點后一個代碼節點即d代碼節點開始執行。
通過本實施例,在代碼執行過程中,通過對持久化代碼節點的輸出數據進行持久化處理,如此在后續代碼節點出現異常后,可以獲取距離所述代碼節點最近的持久化代碼節點的持久化數據,以所述持久化數據作為輸入數據,從所述持久化代碼節點后一個代碼節點開始執行。應用本申請實施例中,在代碼執行過程中代碼節點出現異常后,無需從頭開始執行,從而提高了代碼執行的效率。而且,隨著涉及到的數據量的增加,特別是大數據處理時,從頭開始執行不僅極大的消耗系統資源還可能會出現代碼不可執行的情況,應用本實施例就可以減少系統資源的消耗,避免了代碼不可執行的情況。
參見圖5,為本申請一實施例提供的代碼執行方法的流程圖,所述方法可以包括以下步驟:
步驟210:根據預設規則對待執行的代碼進行解析,從而得到所述代碼中每一個代碼節點所屬的依賴關系,所述依賴關系包括流依賴、映射依賴和打亂依賴。
本實施例中,所述預設規則包括:
在代碼節點的輸入數據只來自一個上一級代碼節點的輸出數據的情況下,確定所述代碼節點屬于流依賴;
在代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據一一對應輸入數據的情況下,確定所述代碼節點屬于映射依賴;
在代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據不一一對應輸入數據的情況下,確定所述代碼節點屬于打亂依賴。
以下舉例說明,某待執行的代碼,根據預設規則對其進行解析后可以得到如圖4所示的代碼節點拓撲圖,這里詳細說下解析過程:
首先,根據代碼節點的運行邏輯:首先執行a代碼節點;之后,執行b、c代碼節點;之后,執行d、e代碼節點;之后,執行f代碼節點;最后執行h代碼節點。根據預設規則,確定b代碼節點屬于流依賴:確定d代碼節點屬于打亂依賴;確定f代碼節點屬于映射依賴;確定h代碼節點屬于流依賴。由于a、c、e代碼節點屬于初始代碼節點不屬于任何依賴。
步驟220:在執行每一個代碼節點后,判斷該代碼節點是否為持久化代碼節點。
本實施例中,所述持久化代碼節點包括屬于打亂依賴的代碼節點。
具體地,在所述代碼節點屬于打亂依賴的情況下,執行步驟230。
本實施例中,在代碼執行時,所述代碼執行設備通過判斷所述代碼節點是否屬于打亂依賴,在確定所述代碼節點屬于打亂依賴的情況下,持久化所述代碼節點的輸出數據。
在一個可選的實施例中,所述持久化節點還可以是具有預設的持久化標識的代碼節點。
具體地,在所述代碼節點具有預設的持久化標識的情況下,執行步驟230。
本實施例中,用戶可以人為預先對代碼節點配置持久化標識,例如某個代碼節點處理數據比較復雜,輸出數據比較重要,那么用戶就可以對該代碼節點配置一個持久化標識;當然用戶也可以對該代碼節點不設置持久化標識,這里只是給用戶增加了一個選項。如此,在代碼執行時,所述代碼執行設備通過判斷所述代碼節點是否具有持久化標識,在確定所述代碼節點具有持久化標識的情況下,持久化所述代碼節點的輸出數據。
在一個可選的實施例中,所述持久化節點還可以是最后一個的代碼節點。
具體地,在所述代碼節點為最后一個代碼節點的情況下,執行步驟230。
本實施例中,代碼執行設備還可以判斷所述代碼節點是否為最后一個代碼節點,在所述代碼節點為最后一個代碼節點的情況下,持久化所述代碼節點的輸出數據。
步驟230:如果是,則持久化該代碼節點的輸出數據。
通過本實施例,在代碼執行過程中,通過對持久化代碼節點的輸出數據進行持久化處理,用于前述代碼異常處理的實施例,即在后續代碼節點出現異常后,獲取距離所述代碼節點最近的持久化代碼節點的持久化數據,以所述持久化數據作為輸入數據,從所述持久化代碼節點后一個代碼節點開始執行。
以下結合圖4所示的一個代碼節點拓撲圖加以說明,其中,包括a代碼節點、b代碼節點、c代碼節點、d代碼節點、e代碼節點、f代碼節點及h代碼節點。
假設a代碼節點的輸入數據為Assembly1;b代碼節點的輸入數據為Assembly2;c代碼節點的輸入數據為Assembly3。
開始執行代碼,執行a代碼節點(對輸入數據Assembly1進行處理后輸出數據Assembly1’);
a代碼節點執行完畢后,由于b代碼節點與a代碼節點之間為流依賴,執行b代碼節點(對輸入數據Assembly1’進行處理后輸出數據Assembly1”);
b代碼節點執行完畢后,由于d代碼節點與b代碼節點、c代碼節點之間為打亂依賴,等待c代碼節點執行完畢;
執行c代碼節點(對輸入數據Assembly2進行處理后輸出數據Assembly2’);
b代碼節點、c代碼節點都執行完畢后,執行d代碼節點(對輸入數據Assembly1”及Assembly2’進行處理后輸出數據Assembly1”2’),由于d代碼節點屬于打亂依賴,持久化輸出數據Assembly1”2’;
d代碼節點執行完畢后,由于f代碼節點與d代碼節點、e代碼節點之間為映射依賴,等待e代碼節點執行完畢;
執行e代碼節點(對輸入數據Assembly3進行處理后輸出Assembly3’);
d代碼節點、e代碼節點都執行完畢后,執行f代碼節點(對輸入數據Assembly1”2’及Assembly3’進行處理后輸出數據Assembly1”2’3’);
f代碼節點執行完畢后,由于h代碼節點與f代碼節點之間為流依賴,執行h代碼節點(對輸入數據Assembly1”2’3’進行處理后輸出數據Assembly),并且由于h代碼節點是結束代碼節點,持久化h代碼節點的輸出數據Assembly,所述代碼執行完畢。
假設執行到h代碼節點時出現異常,那么代碼執行設備只需獲取距離h代碼節點最近的持久化代碼節點即d代碼節點的持久化數據Assembly1”2’;以所述持久化數據Assembly1”2’作為輸入數據,從d代碼節點后一個代碼節點即f代碼節點開始執行。
假設f代碼節點具有持久化標識,那么持久化輸出數據Assembly1”2’3’;如此在h代碼節點出現異常后,代碼執行設備只需獲取距離h代碼節點最近的持久化代碼節點即f代碼節點的持久化數據Assembly1”2’3’;以所述持久化數據Assembly1”2’3’作為輸入數據,從f代碼節點后一個代碼節點即h代碼節點開始執行。
與前述代碼異常處理方法實施例相對應,本申請還提供了代碼異常處理裝置的實施例。
本申請代碼異常處理裝置的實施例可以分別應用在代碼執行設備上。裝置實施例可以通過軟件實現,也可以通過硬件或者軟硬件結合的方式實現。以軟件實現為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內存中運行形成的。從硬件層面而言,如圖6所示,為本申請代碼異常處理裝置所在設備的一種硬件結構圖,除了圖6所示的處理器、網絡接口、內存以及非易失性存儲器之外,實施例中裝置所在的設備通常根據該代碼異常處理的實際功能,還可以包括其他硬件,對此不再贅述。
參見圖7,為本申請一實施例提供的代碼異常處理裝置的模塊圖,所述裝置包括:確定單元300、獲取單元310和執行單元320。
其中,所述確定單元300,在代碼節點出現異常后,確定與該代碼節點距離最近的持久化代碼節點;其中,所述持久化代碼節點為具有持久化數據的代碼節點;
所述獲取單元310,獲取該持久化代碼節點的持久化數據;
所述執行單元320,以所獲取的持久化數據作為輸入數據,從所確定的持久化代碼節點后一個代碼節點開始執行。
在一個可選的實現方式中:
所述持久化數據通過如下方式中的至少一種生成:
第一持久化單元,確定代碼節點與前一級代碼節點之間為流依賴的情況下,持久化所述代碼節點的輸出數據;其中,所述流依賴是代碼節點的輸入數據只來自一個上一級代碼節點的輸出數據;
第二持久化單元,確定代碼節點與前一級代碼節點之間為映射依賴的情況下,持久化所述代碼節點的輸出數據;其中,所述映射依賴是代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據一一對應輸入數據;
第三持久化單元,確定代碼節點與前一級代碼節點之間為打亂依賴的情況下,持久化所述代碼節點的輸出數據;其中,所述打亂依賴是代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據不一一對應輸入數據。
在一個可選的實現方式中:
所述持久化數據通過如下方式生成:
第四持久化單元,確定代碼節點具有持久化標識的情況下,持久化所述代碼節點的輸出數據。
在一個可選的實現方式中:
所述持久化數據通過如下方式生成:
第五持久化單元,確定代碼節點為最后一個代碼節點的情況下,持久化所述代碼節點的輸出數據。
與前述代碼執行方法實施例相對應,本申請還提供了代碼執行裝置的實施例。
本申請代碼執行裝置的實施例可以分別應用在代碼執行設備上。裝置實施例可以通過軟件實現,也可以通過硬件或者軟硬件結合的方式實現。以軟件實現為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內存中運行形成的。從硬件層面而言,如圖8所示,為本申請代碼執行裝置所在設備的一種硬件結構圖,除了圖8所示的處理器、網絡接口、內存以及非易失性存儲器之外,實施例中裝置所在的設備通常根據該代碼執行的實際功能,還可以包括其他硬件,對此不再贅述。
參見圖9,為本申請一實施例提供的代碼執行裝置的模塊圖,所述裝置包括:解析單元400、判斷單元310和持久化單元320。
其中,所述解析單元400,根據預設規則對待執行的代碼進行解析,從而得到所述代碼中每一個代碼節點所屬的依賴關系,所述依賴關系包括流依賴、映射依賴和打亂依賴;
所述判斷單元410,在執行每一個代碼節點后,判斷該代碼節點是否為持久化代碼節點;
所述持久化單元420,在該代碼節點要進行持久化處理的情況下,持久化該代碼節點的輸出數據。
在一個可選的實現方式中:
所述預設規則包括:
在代碼節點的輸入數據只來自一個上一級代碼節點的輸出數據的情況下,確定所述代碼節點屬于流依賴;
在代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據一一對應輸入數據的情況下,確定所述代碼節點屬于映射依賴;
在代碼節點的輸入數據至少來自兩個上一級代碼節點的輸出數據,并且該代碼節點的輸出數據不一一對應輸入數據的情況下,確定所述代碼節點屬于打亂依賴。
在一個可選的實現方式中:
所述持久化代碼節點包括屬于打亂依賴的代碼節點;
或者,
具有預設的持久化標識的代碼節點;
或者,
最后一個的代碼節點。
通過本實施例,在代碼執行過程中,通過對持久化代碼節點的輸出數據進行持久化處理,如此在后續代碼節點出現異常后,可以獲取距離當前代碼節點最近的持久化代碼節點的持久化數據,以所述持久化數據作為輸入數據,從所述持久化代碼節點后一個代碼節點開始執行。應用本申請實施例中,在代碼執行過程中代碼節點出現異常時,無需從頭開始執行,從而提高了代碼執行的效率。而且,隨著涉及到的數據量的增加,特別是大數據處理時,從頭開始執行不僅極大的消耗系統資源還可能會出現代碼不可執行的情況,應用本實施例就可以減少系統資源的消耗,避免了代碼不可執行的情況。
上述裝置中各個單元的功能和作用的實現過程具體詳見上述方法中對應步驟的實現過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本申請方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解并實施。
本領域技術人員在考慮說明書及實踐這里公開的發明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。
應當理解的是,本申請并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權利要求來限制。