本申請涉及計算機領域,具體而言,涉及一種用于TPL Dataflow的控制方法和裝置。
背景技術:
TPL Dataflow是微軟提供的進行流式處理的框架,適合需要高并發(fā)、高性能的應用程序。TPL Dataflow中最基礎的組件是Block(塊),相當于一個處理單元,每個Block定義了如何進行數(shù)據(jù)處理的邏輯。將多個Block鏈接起來,就組成了系統(tǒng)處理管道,只需要在管道開始處輸入數(shù)據(jù),接下來整個管道自動開始運行,從一個Block開始執(zhí)行自己的處理邏輯,處理完成后將得到的數(shù)據(jù)投遞到下一個或多個Block,最終完成整個管道的處理。
參見圖1,分詞程序處理管道的輸入是多個文件,首先由文件讀取Block讀取文件,然后將讀取到的文件內容投遞到下一個Block(即,分行Block);分行Block將文件分為多行,然后將每一行投遞到下一個Block(即,分詞Block);分詞Block將每一行文本分為多個單詞,然后將每個單詞投遞到下一個Block(即,單詞計數(shù)Block);單詞計數(shù)Block對單詞進行計數(shù)并保存。
在利用根據(jù)TPL Dataflow建立的分詞程序處理管道進行數(shù)據(jù)處理時,由于單詞計數(shù)Block依賴于多個分詞Block,在TPL Dataflow的處理過程中,一旦有一個分詞Block完成,單詞計數(shù)Block就完成了,從而導致分詞程序的處理結果不準確,這顯然不是用戶期望的,因為另外一個分詞Block還沒有完成。此外,現(xiàn)有技術中的TPL Dataflow不支持動態(tài)添加Block,比如動態(tài)添加一個分詞Block。
針對上述的問題,目前尚未提出有效的解決方案。
技術實現(xiàn)要素:
本申請實施例提供了一種用于TPL Dataflow的控制方法和裝置,以至少解決現(xiàn)有技術中利用TPL Dataflow的應用程序的處理結果不準確的技術問題。
根據(jù)本申請實施例的一個方面,提供了一種用于TPL Dataflow的控制方法,包括: 注冊處理管道中目標塊Block的上游節(jié)點列表,其中,所述處理管道由TPL Dataflow類庫中的多個Block構成;添加上游節(jié)點至所述上游節(jié)點列表,其中,所述上游節(jié)點用于表征目標Block的上一級Block,所述上一級Block為所述處理管道中與所述目標Block相鄰,且早于所述目標Block執(zhí)行操作的Block;以及根據(jù)所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài),其中,所述目標Block的運行狀態(tài)包括以下之一:完成、取消和失敗。
進一步地,根據(jù)所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài)包括以下任一種:當所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)均為完成時,則所述目標Block的運行狀態(tài)為完成;當所述上游節(jié)點列表中全部所述上游節(jié)點中有任一所述上游節(jié)點對應的上一級Block的運行狀態(tài)為失敗時,則所述目標Block的運行狀態(tài)為失??;當所述上游節(jié)點列表中全部所述上游節(jié)點中有任一所述上游節(jié)點對應的上一級Block的運行狀態(tài)為取消時,則所述目標Block的運行狀態(tài)為取消。
進一步地,添加上游節(jié)點至所述上游節(jié)點列表包括:獲取所述目標Block在所述處理管道中的上一級Block;將表征所述上一級Block的上游節(jié)點添加至所述上游節(jié)點列表。
進一步地,根據(jù)所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài)包括:獲取上游節(jié)點列表快照,并根據(jù)所述上游節(jié)點列表快照中全部的存儲地址對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài),其中,所述上游節(jié)點列表快照用于存儲目標上游節(jié)點對應的上一級Block的存儲地址,所述目標上游節(jié)點為已經添加至所述上游節(jié)點列表中的上游節(jié)點。
進一步地,獲取上游節(jié)點列表快照,并根據(jù)所述上游節(jié)點列表快照中存儲的全部所述存儲地址對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài)包括:獲取所述目標Block的第一上游節(jié)點列表快照;判斷所述第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成;在判斷出所述第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取所述目標Block的第二上游節(jié)點列表快照;判斷所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照是否相同;在判斷出所述第二上游節(jié)點列表快照和所述第一上游節(jié)點列表快照相同的情況下,確定所述目標Block的運行狀態(tài)為完成。
進一步地,所述方法還包括:在判斷出所述第一上游節(jié)點列表快照中任一所述存儲地址對應上一級Block的運行狀態(tài)為失敗后,確定所述目標Block的運行狀態(tài)為失 ??;或者在判斷出所述第一上游節(jié)點列表快照中任一所述存儲地址對應上一級Block的運行狀態(tài)為取消后,確定所述目標Block的運行狀態(tài)為取消。
進一步地,判斷所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照是否相同包括:判斷所述第二上游節(jié)點列表快照中全部的存儲地址和所述第一上游節(jié)點列表快照中全部的存儲地址是否完全匹配,其中,在判斷出所述第二上游節(jié)點列表快照中全部的存儲地址和所述第一上游節(jié)點列表快照中全部的存儲地址完全匹配的情況下,確定所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照相同,在判斷出所述第二上游節(jié)點列表快照中全部的存儲地址和所述第一上游節(jié)點列表快照中全部的存儲地址不完全匹配的情況下的情況下,確定所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照不相同。
進一步地,所述方法還包括:在判斷出所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照不相同的情況下,獲取所述目標Block的第三上游節(jié)點列表快照;判斷所述第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成;在判斷第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取所述目標Block的第四上游節(jié)點列表快照;判斷所述第四上游節(jié)點列表快照與所述第三上游節(jié)點列表快照是否相同;在判斷出所述第四上游節(jié)點列表快照和所述第三上游節(jié)點列表快照相同的情況下,確定所述目標Block的運行狀態(tài)為完成。
根據(jù)本申請實施例的另一方面,還提供了一種用于TPL Dataflow的控制裝置,包括:注冊單元,用于注冊處理管道中目標塊Block的上游節(jié)點列表,其中,所述處理管道由TPL Dataflow類庫中的多個Block構成;添加單元,用于添加上游節(jié)點至所述上游節(jié)點列表,其中,所述上游節(jié)點用于表征目標Block的上一級Block,所述上一級Block為所述處理管道中與所述目標Block相鄰,且早于所述目標Block執(zhí)行操作的Block;確定單元,用于根據(jù)所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài),其中,所述目標Block的運行狀態(tài)包括以下之一:完成、取消和失敗。
進一步地,所述確定單元包括以下之一:第一確定子單元,用于當所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)均為完成時,則所述目標Block的運行狀態(tài)為完成;第二確定子單元,用于當所述上游節(jié)點列表中全部所述上游節(jié)點中有任一所述上游節(jié)點對應的上一級Block的運行狀態(tài)為失敗時,則所述目標Block的運行狀態(tài)為失敗;第三確定子單元,用于當所述上游節(jié)點列表中全部所述上游節(jié)點中有任一所述上游節(jié)點對應的上一級Block的運行狀態(tài)為取消時,則所述目標 Block的運行狀態(tài)為取消。
進一步地,所述添加單元包括:獲取子單元,用于獲取所述目標Block在所述處理管道中的上一級Block;添加子單元,用于將表征所述上一級Block的上游節(jié)點添加至所述上游節(jié)點列表。
進一步地,所述確定單元包括:處理子單元,用于獲取上游節(jié)點列表快照,并根據(jù)所述上游節(jié)點列表快照中全部的存儲地址對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài),其中,所述上游節(jié)點列表快照用于存儲目標上游節(jié)點對應的上一級Block的存儲地址,所述目標上游節(jié)點為已經添加至所述上游節(jié)點列表中的上游節(jié)點。
進一步地,所述處理子單元包括:第一獲取模塊,用于獲取所述目標Block的第一上游節(jié)點列表快照;第一判斷模塊,用于判斷所述第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成;第二獲取模塊,用于在判斷出所述第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取所述目標Block的第二上游節(jié)點列表快照;第二判斷模塊,用于判斷所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照是否相同;第一確定模塊,用于在判斷出所述第二上游節(jié)點列表快照和所述第一上游節(jié)點列表快照相同的情況下,確定所述目標Block的運行狀態(tài)為完成。
進一步地,所述裝置還包括:第二確定模塊,用于在判斷所述第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成之后,在判斷出所述第一上游節(jié)點列表快照中任一所述存儲地址對應上一級Block的運行狀態(tài)為失敗后,確定所述目標Block的運行狀態(tài)為失??;或者第三確定模塊,用于在判斷所述第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成之后,在判斷出所述第一上游節(jié)點列表快照中任一所述存儲地址對應上一級Block的運行狀態(tài)為取消后,確定所述目標Block的運行狀態(tài)為取消。
進一步地,所述第二判斷模塊包括:判斷子模塊,用于判斷所述第二上游節(jié)點列表快照中全部的存儲地址和所述第一上游節(jié)點列表快照中全部的存儲地址是否完全匹配,其中,在判斷出所述第二上游節(jié)點列表快照中全部的存儲地址和所述第一上游節(jié)點列表快照中全部的存儲地址完全匹配的情況下,確定所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照相同,在判斷出所述第二上游節(jié)點列表快照中全部的存儲地址和所述第一上游節(jié)點列表快照中全部的存儲地址不完全匹配的情況下的情況下,確定所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照不相同。
進一步地,所述裝置還包括:第三獲取模塊,用于在判斷所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照是否相同之后,在判斷出所述第二上游節(jié)點列表快照與所述第一上游節(jié)點列表快照不相同的情況下,獲取所述目標Block的第三上游節(jié)點列表快照;第三判斷模塊,用于判斷所述第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成;第四獲取模塊,用于在判斷第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取所述目標Block的第四上游節(jié)點列表快照;第四判斷模塊,用于判斷所述第四上游節(jié)點列表快照與所述第三上游節(jié)點列表快照是否相同;第四確定模塊,用于在判斷出所述第四上游節(jié)點列表快照和所述第三上游節(jié)點列表快照相同的情況下,確定所述目標Block的運行狀態(tài)為完成。
在本申請實施例中,采用注冊處理管道中目標塊Block的上游節(jié)點列表,其中,所述處理管道由TPL Dataflow類庫中的多個Block構成;添加上游節(jié)點至所述上游節(jié)點列表,其中,所述上游節(jié)點用于表征目標Block的上一級Block,所述上一級Block為所述處理管道中與所述目標Block相鄰,且早于所述目標Block執(zhí)行操作的Block;根據(jù)所述上游節(jié)點列表中全部所述上游節(jié)點對應的上一級Block的運行狀態(tài)確定所述目標Block的運行狀態(tài),其中,所述目標Block的運行狀態(tài)包括以下之一:完成、取消和失敗的方式。通過建立目標Block的上游節(jié)點列表,進而添加上游節(jié)點至上游節(jié)點列表,其中,上游節(jié)點為表征目標Block的上一級Block的節(jié)點,最后根據(jù)添加至上游節(jié)點列表中的全部上游節(jié)點對應的上一級Block共同確定目標Block的運行狀態(tài),達到了根據(jù)與該目標Block相關的全部Block共同來確定出該目標Block的運行狀態(tài),使得該目標Block的處理結果更加準確的目的,由于目標Block的處理結果與利用TPL Dataflow的應用程序的處理結果相關聯(lián),從而實現(xiàn)了提高利用TPL Dataflow的應用程序的處理結果準確性的技術效果,進而解決了現(xiàn)有技術中利用TPL Dataflow的應用程序的處理結果不準確的技術問題。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
圖1是現(xiàn)有技術中利用TPL Dataflow的分詞程序的處理管道的示意圖;
圖2是根據(jù)本申請實施例的一種用于TPL Dataflow的控制方法的流程圖;以及
圖3是根據(jù)本申請實施例的一種用于TPL Dataflow的控制裝置的示意圖。
具體實施方式
為了使本技術領域的人員更好地理解本申請方案,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分的實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本申請保護的范圍。
需要說明的是,本申請的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本申請的實施例能夠以除了在這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它步驟或單元。
根據(jù)本申請實施例,提供了一種用于TPL Dataflow的控制方法的方法實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖2是根據(jù)本申請實施例的一種用于TPL Dataflow的控制方法的流程圖,如圖2所示,該方法包括步驟S202至步驟S206,具體如下:
步驟S202,注冊處理管道中目標塊Block的上游節(jié)點列表,其中,處理管道由TPL Dataflow類庫中的多個Block構成。
具體地,目標Block為利用TPL Dataflow的應用程序中,具有上一級Block的Block。其中,上一級Block的含義請見下文描述。以圖1中所示的分詞程序為例,目標Block可以為分行Block、分詞Block或者單詞計數(shù)Block。
步驟S204,添加上游節(jié)點至上游節(jié)點列表,其中,上游節(jié)點用于表征目標Block的上一級Block,上一級Block為處理管道中與目標Block相鄰,且早于目標Block執(zhí)行操作的Block。
具體地,上游節(jié)點的數(shù)量可以為一個,也可以為多個,具體根據(jù)上一級Block的數(shù)量確定。每個上游節(jié)點對應一個上一級Block,也即,上游節(jié)點與上一級Block一一對應。
參照圖1,繼續(xù)采用上述舉例進行說明,當目標Block為分詞Block時,上一級Block有一個,具體為分行Block;當目標Block為單詞計數(shù)Block時,上一級Block有兩個,均為分詞Block。
步驟S206,根據(jù)上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài),其中,目標Block的運行狀態(tài)包括以下之一:完成、取消和失敗,也即,根據(jù)全部的上一級Block的運行狀態(tài)共同確定出目標Block的運行狀態(tài)。
具體地,當目標Block的運行狀態(tài)為完成時,目標Block完成執(zhí)行操作;當目標Block的運行狀態(tài)為取消時,目標Block取消執(zhí)行操作;當目標Block的運行狀態(tài)為失敗時,則目標Block執(zhí)行操作失敗。
假設目標Block為單詞計數(shù)Block,當單詞計數(shù)Block的運行狀態(tài)為完成時,則單詞計數(shù)Block完成單詞計數(shù)操作;當單詞計數(shù)Block的運行狀態(tài)為取消時,則單詞計數(shù)Block取消執(zhí)行單詞計數(shù)操作;當單詞計數(shù)Block的運行狀態(tài)為失敗時,則單詞計數(shù)Block執(zhí)行單詞計數(shù)操作失敗。
例如,上游節(jié)點有5個,則根據(jù)這5個上游節(jié)點對應的5個上一級Block的運行狀態(tài)共同確出目標Block的運行狀態(tài)。
在本申請實施例中,通過建立目標Block的上游節(jié)點列表,進而添加上游節(jié)點至上游節(jié)點列表,其中,上游節(jié)點為表征目標Block的上一級Block的節(jié)點,最后根據(jù)添加至上游節(jié)點列表中的全部上游節(jié)點對應的上一級Block共同確定目標Block的運行狀態(tài),達到了根據(jù)與該目標Block相關的全部Block共同來確定出該目標Block的運行狀態(tài),使得該目標Block的處理結果更加準確的目的,由于目標Block的處理結果與利用TPL Dataflow的應用程序的處理結果相關聯(lián),從而實現(xiàn)了提高利用TPL Dataflow的應用程序的處理結果準確性的技術效果,進而解決了現(xiàn)有技術中利用TPL Dataflow的應用程序的處理結果不準確的技術問題。
可選地,根據(jù)上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài)包括以下任一種情況:
情況一:當上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)均為完成時,則目標Block的運行狀態(tài)為完成,也即,若目標Block的每個上一級Block的運行狀態(tài)都為完成時,則目標Block的運行狀態(tài)為完成。
情況二:當上游節(jié)點列表中全部上游節(jié)點中有任一上游節(jié)點對應的上一級Block的運行狀態(tài)為失敗時,則目標Block的運行狀態(tài)為失敗,也即,若目標Block的上一 級Block中存在運行狀態(tài)為失敗的上一級Block,則目標Block的運行狀態(tài)為失敗。
情況三:當上游節(jié)點列表中全部上游節(jié)點中有任一上游節(jié)點對應的上一級Block的運行狀態(tài)為取消時,則目標Block的運行狀態(tài)為取消,也即,若目標Block的上一級Block中存在運行狀態(tài)為取消的上一級Block,則目標Block的運行狀態(tài)為取消。
可選地,在本申請實施例中,添加上游節(jié)點至上游節(jié)點列表包括步驟S1至步驟S3,具體如下:
步驟S1,獲取目標Block在處理管道中的上一級Block。
步驟S3,將表征上一級Block的上游節(jié)點添加至上游節(jié)點列表。
在本申請實施例中,可以是獲取一個目標Block的上一級Block,就添加一個表征上一級Block的上游節(jié)點至上游節(jié)點列表,也可以是獲取到目標Block的全部上一級Block后,逐個添加表征上一級Block的上游節(jié)點至上游節(jié)點列表。
可選地,根據(jù)上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài)包括步驟S5,具體如下:
步驟S5,獲取上游節(jié)點列表快照,并根據(jù)上游節(jié)點列表快照中全部的存儲地址對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài),其中,上游節(jié)點列表快照用于存儲目標上游節(jié)點對應的上一級Block的存儲地址,目標上游節(jié)點為已經添加至上游節(jié)點列表中的上游節(jié)點,本步驟也即,根據(jù)全部目標上游節(jié)點對應的上一級Block的運行狀態(tài)共同確定出目標Block的運行狀態(tài)。
具體地,在注冊第一個上游節(jié)點至上游節(jié)點列表后,就開始獲取上游節(jié)點列表快照。上游節(jié)點列表快照中存儲有目標上游節(jié)點對應的上一級Block在本地機器上的存儲地址,根據(jù)該存儲地址可以找到上述上一級Block的相關文件,進而可以根據(jù)上述相關文件的文本內容得到該上一級Block的運行狀態(tài)。
可選地,步驟S5獲取上游節(jié)點列表快照,并根據(jù)上游節(jié)點列表快照中存儲的全部存儲地址對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài)包括步驟S51至步驟S59,具體如下:
步驟S51,獲取目標Block的第一上游節(jié)點列表快照。
一般情況下,在添加第一個上游節(jié)點至上游節(jié)點列表后,就獲取目標Block的第一上游節(jié)點列表快照,所以第一上游節(jié)點列表快照中至少包含一個上游節(jié)點對應的上一級Block的存儲地址。
步驟S53,判斷第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成。
步驟S55,在判斷出第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取目標Block的第二上游節(jié)點列表快照。其中,第二上游節(jié)點列表快照的獲取時間晚于第一上游節(jié)點列表快照的獲取時間。
步驟S57,判斷第二上游節(jié)點列表快照與第一上游節(jié)點列表快照是否相同。
步驟S59,在判斷出第二上游節(jié)點列表快照和第一上游節(jié)點列表快照相同的情況下,確定目標Block的運行狀態(tài)為完成。
考慮到存在上游節(jié)點較多的情況,由于上游節(jié)點是逐個添加到上游節(jié)點列表中的,并且在添加第一個上游節(jié)點至上游節(jié)點列表后,就開始獲取第一列表快照,則在獲取第一上游節(jié)點列表快照的過程中,仍會添加其它上游節(jié)點至上游節(jié)點列表,也即,獲取上游節(jié)點列表快照和添加上游節(jié)點至上游節(jié)點列表是并列進行的,這樣的話,在較早獲取到的第一上游節(jié)點列表快照中,可能只包含部分已經添加到上游節(jié)點列表中上游節(jié)點對應的上一級Block的存儲地址,但獲取第一上游節(jié)點列表快照后才添加至上游節(jié)點列表中的上游節(jié)點對應的上一級Block的存儲地址則不在上述第一上游節(jié)點列表快照中,進而為了避免第一上游節(jié)點列表快照中存儲地址數(shù)據(jù)不全,無法準確的根據(jù)其內的存儲地址對應的上一級Block的運行狀態(tài)確定出目標Block的運行狀態(tài)的情況,還需再次獲取上游節(jié)點列表快照(也即,第二上游節(jié)點列表快照),并比較兩次上游節(jié)點列表快照是否相同,在相同的情況下,可以直接得出目標Block的運行狀態(tài),在不相同的情況下,再獲取新的上游節(jié)點列表快照,并根據(jù)新的上游節(jié)點列表快照中的存儲地址確定目標Block的運行狀態(tài)。
需要說明的是,上述內容中獲取第一上游節(jié)點列表快照后才添加至上游節(jié)點列表中的上游節(jié)點對應的上一級Block可能是用戶在處理管道中新添加關于目標Block的上一級Block(也即,用戶在處理管道中動態(tài)添加的新的上一級Block),也可能是關于目標Block在處理管道中原本就存在的上一級Block。
通過上述內容可知,本申請實施例支持用戶在利用TPL Dataflow類庫創(chuàng)建的處理管道中,根據(jù)其需求動態(tài)添加新的Block,與現(xiàn)有技術中不支持用戶動態(tài)添加新的Block相比,達到了提高用戶滿意度的效果。
可選地,在本申請實施例中,用于TPL Dataflow的控制方法還包括步驟S511或者步驟S513,具體如下:
步驟S511,在判斷出第一上游節(jié)點列表快照中任一存儲地址對應上一級Block的 運行狀態(tài)為失敗后,確定目標Block的運行狀態(tài)為失敗。
步驟S513,在判斷出第一上游節(jié)點列表快照中任一存儲地址對應上一級Block的運行狀態(tài)為取消后,確定目標Block的運行狀態(tài)為取消。
具體地,如果判斷出第一上游節(jié)點列表快照中有一個存儲地址對應的上一級Block的運行狀態(tài)為失敗,則目標Block的運行狀態(tài)為失敗,同樣的,如果判斷出第一上游節(jié)點列表快照中有一個存儲地址對應的上一級Block的運行狀態(tài)為取消,則目標Block的運行狀態(tài)為取消,并且后續(xù)不會再獲取其它的上游節(jié)點列表快照。
可選地,步驟S57中判斷第二上游節(jié)點列表快照與第一上游節(jié)點列表快照是否相同包括:判斷第二上游節(jié)點列表快照中全部的存儲地址和第一上游節(jié)點列表快照中全部的存儲地址是否完全匹配,其中,在判斷出第二上游節(jié)點列表快照中全部的存儲地址和第一上游節(jié)點列表快照中全部的存儲地址完全匹配的情況下,確定第二上游節(jié)點列表快照與第一上游節(jié)點列表快照相同,在判斷出第二上游節(jié)點列表快照中全部的存儲地址和第一上游節(jié)點列表快照中全部的存儲地址不完全匹配的情況下的情況下,確定第二上游節(jié)點列表快照與第一上游節(jié)點列表快照不相同。
其中,上述是否完全匹配包括兩方面:一方面是第二上游節(jié)點列表快照中全部的存儲地址的數(shù)量與第一上游節(jié)點列表快照中全部的存儲地址的數(shù)量是否相同;另一方面是第二上游節(jié)點列表快照中每個存儲地址是否與第一上游節(jié)點列表快照中每個存儲地址的存儲路徑是否相同。若上述兩方面都滿足,則說明第二上游節(jié)點列表快照與第一上游節(jié)點列表快照相同;若只滿足一個方面或者一個方面都未滿足,則說明第二上游節(jié)點列表快照與第一上游節(jié)點列表快照不相同。需要說明的是,若第二上游節(jié)點列表快照中全部存儲地址與第一上游節(jié)點列表快照中全部存儲地址所存儲的存儲路徑中有部分不同或者完全不同,則確定未滿足該方面要求,換而言之,只要第二上游節(jié)點列表快照中的存儲地址與第一上游節(jié)點列表快照中的存儲地址存在差異,則認為第二上游節(jié)點列表快照與第一上游節(jié)點列表快照不同。
可選地,在本申請實施例中,用于TPL Dataflow的控制方法還包括步驟S515至步驟S523:
步驟S515,在判斷出第二上游節(jié)點列表快照與第一上游節(jié)點列表快照不相同的情況下,獲取目標Block的第三上游節(jié)點列表快照。
其中,第三上游節(jié)點列表快照的獲取時間晚于第二上游節(jié)點列表快照的獲取時間。
步驟S517,判斷第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成。
步驟S519,在判斷第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取目標Block的第四上游節(jié)點列表快照。
其中,第四上游節(jié)點列表快照的獲取時間晚于第三上游節(jié)點列表快照的獲取時間。
同樣的,如果判斷出第三上游節(jié)點列表快照中有一個存儲地址對應的上一級Block的運行狀態(tài)為失敗,則目標Block的運行狀態(tài)為失敗,同樣的,如果判斷出第三上游節(jié)點列表快照中有一個存儲地址對應的上一級Block的運行狀態(tài)為取消,則目標Block的運行狀態(tài)為取消,并且后續(xù)不會再獲取其它的上游節(jié)點列表快照(例如,第四上游節(jié)點列表快照)。
步驟S521,判斷第四上游節(jié)點列表快照與第三上游節(jié)點列表快照是否相同。
具體地,判斷第四上游節(jié)點列表快照與第三上游節(jié)點列表快照是否相同的過程與判斷第二上游節(jié)點列表快照與第一上游節(jié)點列表快照是否相同的過程相同,具體請參照上述實施例中對判斷第二上游節(jié)點列表快照與第一上游節(jié)點列表快照是否相同的說明,在此不再贅述。
步驟S523,在判斷出第四上游節(jié)點列表快照和第三上游節(jié)點列表快照相同的情況下,確定目標Block的運行狀態(tài)為完成。
需要說明的是,如果第四上游節(jié)點列表快照與第三上游節(jié)點列表快照不同,則需要繼續(xù)獲取第五上游節(jié)點列表快照,甚至第六上游節(jié)點列表快照,第五上游節(jié)點列表快照和第六上游節(jié)點列表快照的獲取條件以及獲取第五上游節(jié)點列表快照和第六上游節(jié)點列表快照后的處理過程可以參照上述步驟S515至步驟S523,在此不再重復說明,直至確定出目標Block的運行狀態(tài)。
為了能夠更好的理解本申請實施例所提供的用于TPL Dataflow的控制方法,參照圖1,下面以目標Block為單詞計數(shù)Block為例,進行舉例說明。
參照圖1,需要利用TPL Dataflow創(chuàng)建分詞程序的處理管道,在該處理管道中包括兩個分詞Block和一個單詞計數(shù)Block。另,為了方便說明,將兩個分詞Block分別命名為分詞Block1和分詞Block2,至于上述兩個分詞Block中哪個分詞Block為分詞Block1,哪個是分詞Block為分詞Block2,不做限定。
根據(jù)上述內容可知,單詞計數(shù)Block的上一級Block有兩個,分別為分詞Block1和分詞Block2。
具體過程如下:首先,注冊一個單詞計數(shù)Block的上游節(jié)點列表;其次,添加分詞Block1對應的上游節(jié)點至上游節(jié)點列表;然后,在添加分詞Block1對應的上游節(jié) 點至上游節(jié)點列表后,獲取上游節(jié)點列表快照,記為快照1,此時快照1只包含分詞Block1的存儲地址。假設分詞Block1先執(zhí)行完分詞操作,此時單詞計數(shù)Block也準備執(zhí)行單詞計數(shù)操作。但是在單詞計數(shù)Block準備執(zhí)行單詞計數(shù)操作前,再次獲取上游節(jié)點列表快照,記為快照2,此時,快照2包含分詞Block1的存儲地址和分詞Block2的存儲地址,由于快照1只包含分詞Block1的存儲地址,因此,確定快照2和快照1不一樣。則再次獲取上游節(jié)點快照,記為快照3,快照3中也包含分詞Block1的存儲地址和分詞Block2的存儲地址,但是分詞Block1已完成分詞操作,分詞Block2未完成分詞操作,因此單詞計數(shù)Block也未完成單詞計數(shù)操作。此時,假設此時用戶動態(tài)注冊了一個分詞Block,記為分詞Block3,則單詞計數(shù)Block又多了一個上一級Block。當分詞Block2也完成分詞操作時,則快照3中全部的存儲地址對應上一級Block都已執(zhí)行完分詞操作,單詞計數(shù)Block再次準備執(zhí)行單詞計數(shù)操作。在單詞計數(shù)Block準備執(zhí)行單詞計數(shù)操作前,再次獲取上游節(jié)點列表快照,記為快照4,此時,快照4包含分詞Block1的存儲地址、分詞Block2的存儲地址和分詞Block3的存儲地址,因為快照3中包含的是Block1的存儲地址和Block2的存儲地址,因此快照4和快照3仍不一樣。則再次獲取上游節(jié)點列表快照,記為快照5,假設此后用戶不再注冊新的分詞Block,當分詞Block3執(zhí)行完分詞操作時,再次獲取上游節(jié)點列表快照,記為快照6,此時快照5和快照6都包含分詞Block1的存儲地址、分詞Block2的存儲地址和分詞Block3的存儲地址,則說明快照5和快照6相同,那么單詞計數(shù)Block也就可以執(zhí)行單詞計數(shù)操作了,也即單詞計數(shù)Block的運行狀態(tài)為完成。
通過上述內容可知,應用本申請實施例所提供的用于TPL Dataflow的控制方法,應用程序處理管道中的目標Block不僅能夠自動、準確的得出操作結果,還支持用戶動態(tài)添加Block。
根據(jù)本申請實施例,還提供了一種用于TPL Dataflow的控制裝置,該用于TPL Dataflow的控制裝置用于執(zhí)行本申請實施例上述內容所提供的用于TPL Dataflow的控制方法,以下對本申請實施例所提供的用于TPL Dataflow的控制裝置做具體介紹:
圖3是根據(jù)本申請實施例的一種用于TPL Dataflow的控制裝置的示意圖,如圖3所示,該控制裝置主要包括注冊單元31、添加單元33和確定單元35,其中:
注冊單元31用于注冊處理管道中目標塊Block的上游節(jié)點列表,其中,處理管道由TPL Dataflow類庫中的多個Block構成。
具體地,目標Block為利用TPL Dataflow的應用程序中,具有上一級Block的Block。其中,上一級Block的含義請見下文描述。以圖1中所示的分詞程序處理管道為例,目標Block可以為分行Block、分詞Block或者單詞計數(shù)Block。
添加單元33用于添加上游節(jié)點至上游節(jié)點列表,其中,上游節(jié)點用于表征目標Block的上一級Block,上一級Block為處理管道中與目標Block相鄰,且早于目標Block執(zhí)行操作的Block。
具體地,上游節(jié)點的數(shù)量可以為一個,也可以為多個,具體根據(jù)上一級Block的數(shù)量確定。每個上游節(jié)點對應一個上一級Block,也即,上游節(jié)點與上一級Block一一對應。
確定單元35用于根據(jù)上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài),其中,目標Block的運行狀態(tài)包括以下之一:完成、取消和失敗,也即,根據(jù)全部的上一級Block的運行狀態(tài)共同確定出目標Block的運行狀態(tài)。
在本申請實施例中,通過建立目標Block的上游節(jié)點列表,進而添加上游節(jié)點至上游節(jié)點列表,其中,上游節(jié)點為表征目標Block的上一級Block的節(jié)點,最后根據(jù)添加至上游節(jié)點列表中的全部上游節(jié)點對應的上一級Block共同確定目標Block的運行狀態(tài),達到了根據(jù)與該目標Block相關的全部Block共同來確定出該目標Block的運行狀態(tài),使得該目標Block的處理結果更加準確的目的,由于目標Block的處理結果與利用TPL Dataflow的應用程序的處理結果相關聯(lián),從而實現(xiàn)了提高利用TPL Dataflow的應用程序的處理結果準確性的技術效果,進而解決了現(xiàn)有技術中利用TPL Dataflow的應用程序的處理結果不準確的技術問題。
可選地,在本申請實施例中,確定單元35包括第一確定子單元、第二確定子單元和第三確定子單元中的任一子單元。其中,第一確定子單元用于當上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)均為完成時,則目標Block的運行狀態(tài)為完成;第二確定子單元用于當上游節(jié)點列表中全部上游節(jié)點中有任一上游節(jié)點對應的上一級Block的運行狀態(tài)為失敗時,則目標Block的運行狀態(tài)為失??;第三確定子單元用于當上游節(jié)點列表中全部上游節(jié)點中有任一上游節(jié)點對應的上一級Block的運行狀態(tài)為取消時,則目標Block的運行狀態(tài)為取消。
可選地,在本申請實施例中,添加單元33包括獲取子單元和添加子單元。其中,獲取子單元用于獲取目標Block在處理管道中的上一級Block;添加子單元用于將表征上一級Block的上游節(jié)點添加至上游節(jié)點列表。
可選地,在本申請實施例中,確定單元35包括處理子單元。其中,處理子單元用于獲取上游節(jié)點列表快照,并根據(jù)上游節(jié)點列表快照中全部的存儲地址對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài),其中,上游節(jié)點列表快照用于存儲目 標上游節(jié)點對應的上一級Block的存儲地址,目標上游節(jié)點為已經添加至上游節(jié)點列表中的上游節(jié)點,處理子單元也即用于根據(jù)全部目標上游節(jié)點對應的上一級Block的運行狀態(tài)共同確定出目標Block的運行狀態(tài)。
可選地,處理子單元包括第一獲取模塊、第一判斷模塊、第二獲取模塊、第二判斷模塊和第一確定模塊,其中:
第一獲取模塊用于獲取目標Block的第一上游節(jié)點列表快照。
第一判斷模塊用于判斷第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成。
第二獲取模塊用于在判斷出第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取目標Block的第二上游節(jié)點列表快照。其中,第二上游節(jié)點列表快照的獲取時間晚于第一上游節(jié)點列表快照的獲取時間。
第二判斷模塊用于判斷第二上游節(jié)點列表快照與第一上游節(jié)點列表快照是否相同。
第一確定模塊用于在判斷出第二上游節(jié)點列表快照和第一上游節(jié)點列表快照相同的情況下,確定目標Block的運行狀態(tài)為完成。
通過上述內容可知,本申請實施例支持用戶在利用TPL Dataflow類庫創(chuàng)建的處理管道中,根據(jù)其需求動態(tài)添加新的Block,與現(xiàn)有技術中不支持用戶動態(tài)添加新的Block相比,達到了提高用戶滿意度的效果。
進一步可選地,在本申請實施例中,裝置還包括第二確定模塊或者第三確定模塊。其中,第二確定模塊用于在判斷第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成之后,在判斷出第一上游節(jié)點列表快照中任一存儲地址對應上一級Block的運行狀態(tài)為失敗后,確定目標Block的運行狀態(tài)為失??;第三確定模塊用于在判斷第一上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成之后,在判斷出第一上游節(jié)點列表快照中任一存儲地址對應上一級Block的運行狀態(tài)為取消后,確定目標Block的運行狀態(tài)為取消。
可選地,在本申請實施例中,第二判斷模塊包括:判斷子模塊,用于判斷第二上游節(jié)點列表快照中全部的存儲地址和第一上游節(jié)點列表快照中全部的存儲地址是否完全匹配,其中,在判斷出第二上游節(jié)點列表快照中全部的存儲地址和第一上游節(jié)點列表快照中全部的存儲地址完全匹配的情況下,確定第二上游節(jié)點列表快照與第一上游節(jié)點列表快照相同,在判斷出第二上游節(jié)點列表快照中全部的存儲地址和第一上游節(jié)點列表快照中全部的存儲地址不完全匹配的情況下的情況下,確定第二上游節(jié)點列表 快照與第一上游節(jié)點列表快照不相同。
可選地,在本申請實施例中,裝置還包括第三獲取模塊、第三判斷模塊、第四獲取模塊、第四判斷模塊和第四確定模塊,其中:
第三獲取模塊用于在判斷第二上游節(jié)點列表快照與第一上游節(jié)點列表快照是否相同之后,在判斷出第二上游節(jié)點列表快照與第一上游節(jié)點列表快照不相同的情況下,獲取目標Block的第三上游節(jié)點列表快照。
第三判斷模塊用于判斷第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)是否均為完成。
第四獲取模塊用于在判斷第三上游節(jié)點列表快照中每個存儲地址對應的上一級Block的運行狀態(tài)均為完成的情況下,獲取目標Block的第四上游節(jié)點列表快照。
同樣的,如果判斷出第三上游節(jié)點列表快照中有一個存儲地址對應的上一級Block的運行狀態(tài)為失敗,則目標Block的運行狀態(tài)為失敗,同樣的,如果判斷出第三上游節(jié)點列表快照中有一個存儲地址對應的上一級Block的運行狀態(tài)為取消,則目標Block的運行狀態(tài)為取消,并且后續(xù)不會再獲取其它的上游節(jié)點列表快照。
第四判斷模塊用于判斷第四上游節(jié)點列表快照與第三上游節(jié)點列表快照是否相同。
第四確定模塊用于在判斷出第四上游節(jié)點列表快照和第三上游節(jié)點列表快照相同的情況下,確定目標Block的運行狀態(tài)為完成。
需要說明的是,如果第四上游節(jié)點列表快照與第三上游節(jié)點列表快照不同,則需要繼續(xù)獲取第五上游節(jié)點列表快照,甚至第六上游節(jié)點列表快照,第五上游節(jié)點列表快照和第六上游節(jié)點列表快照的獲取條件以及獲取第五上游節(jié)點列表快照和第六上游節(jié)點列表快照后的處理過程可以參照上述第三獲取模塊、第三判斷模塊、第四獲取模塊、第四判斷模塊以及第四確定模塊,在此不再重復說明,直至確定出目標Block的運行狀態(tài)。
所述用于TPL Dataflow的控制裝置包括處理器和存儲器,上述注冊單元、添加單元和確定單元等均作為程序單元存儲在存儲器中,由處理器執(zhí)行存儲在存儲器中的上述程序單元。
處理器中包含內核,由內核去存儲器中調取相應的程序單元。內核可以設置一個或以上,通過調整內核參數(shù)實現(xiàn)了提高利用TPL Dataflow的應用程序的處理結果準確性,進而解決了現(xiàn)有技術中利用TPL Dataflow的應用程序的處理結果不準確的技術問題。
存儲器可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM),存儲器包括至少一個存儲芯片。
本申請還提供了一種計算機程序產品的實施例,當在數(shù)據(jù)處理設備上執(zhí)行時,適于執(zhí)行初始化有如下方法步驟的程序代碼:注冊處理管道中目標塊Block的上游節(jié)點列表,其中,處理管道由TPL Dataflow類庫中的多個Block構成;添加上游節(jié)點至上游節(jié)點列表,其中,上游節(jié)點用于表征目標Block的上一級Block,上一級Block為處理管道中與目標Block相鄰,且早于目標Block執(zhí)行操作的Block;根據(jù)上游節(jié)點列表中全部上游節(jié)點對應的上一級Block的運行狀態(tài)確定目標Block的運行狀態(tài),其中,目標Block的運行狀態(tài)包括以下之一:完成、取消和失敗。
上述本申請實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
在本申請的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的技術內容,可通過其它的方式實現(xiàn)。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本申請的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可為個人計算機、服務器或者網絡設備等)執(zhí)行本申請各個實施例所 述方法的全部或部分步驟。而前述的存儲介質包括:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。
以上所述僅是本申請的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本申請的保護范圍。