geyser学习记录(day1):将任务拆分的架构
所有的內容都是對這個文檔所說的任務分解架構的理解:
geyser的文檔:geyser
0.一個核心思想
我們在學習這個框架的時候首先我們得知道這個東西是用來干什么的?設計思想是什么?
這個框架的主要設計思想就是將一個個任務進行拆分,之后通過一個配置文件直接控制全部的程序執行,這樣的好處就是我們一旦將代碼寫完之后,我們進行baseline或是消融實驗的時候,我們都不再需要修改代碼了,只需要簡單的修改配置文件就可以了。
核心思想在我理解看來就是:通過調整一個配置文件可以控制整個程序的執行過程,甚至各個模塊之間的執行順序。并且和原來的代碼比起來,我們只需要在原來的代碼的各個模塊上加入裝飾器,編寫一個配置文檔,開銷很低。
1.怎么標識一個資源
1.1使用一個標識來標記一個類的重要性
這個框架當中我們既然要把一個整個的程序拆分成一個個代碼塊,所以我們就需要解決這些代碼塊之間的參數傳遞的問題,顯然我們不能使用變量名進行傳遞了,因為這個東西只在一小部分范圍當中產生效果(在當前這個py文件當中我們可能可以找到,出了這個py文件我們就不能通過變量名找到了)。這就需要我們通過class的唯一標識符來尋找到一個個內容。(這個標識在一個項目當中是唯一的)
1.2這個標識符怎么獲得
我們只需要右擊這個類名,進行點擊就可以獲得了。
1.3我們只是解決了找到這個東西,那么怎么用?
這就需要我們使用到geyser.utility當中兩個小工具:
- reference:我們幫助我們使用類名找到標識
- reflect:我們通過類的標識找到這個類
2.幾個主要的概念
2.1Task
Task是任務流模型的基本單元,定義了基本的任務行為。你可以繼承Task來定義你的任務,并通過Geyser.task來注冊你的任務。
Task這里你交給系統一件他需要完成的任務。
你只需要告訴系統(這都需要使用上面的reference):
- 他完成這個任務可以提供什么依賴;
- 他完成這個任務需要什么依賴;
- 他完成這個任務的恢復需要什么依賴。
這三個你需要按照框架規定的方式進行傳入即可
額外說明這個恢復
額外說一下這個恢復的情況,就是如果我們這個task發生了什么意外
2.2落實到代碼
我們看一下文檔當中給出的例子:
from geyser import Geyser from taskflow.task import Task@Geyser.task(provides=('foo',)) class Foo(Task):def execute(self, foo):return 'FOO', # 或者 ['FOO']# ^ 注意這里的逗號!可以看到我們在進行注冊時候只需要加入一個裝飾器,這個裝飾器的參數就是上面提到的三個參數:
為了搞明白這個東西我們需要從兩方面理解這個內容:
首先是什么是Task?
如果你繼承自這個Task這個類,那么你就需要定義一個excuse函數,這個函數就是在這個任務當中需要完成的任務。
之后是這些參數怎么傳入?
-
1.這個provides是這個任務完成之后提供什么內容:
就是這個任務提供什么內容,這個東西可以給你返回內容逐個對應的命名。這樣下面的內容就可以在provides當中直接使用這些名來進行傳入。 -
2.這個requires是完成這個任務需要什么內容:
這些requires的內容會被架構,直接傳入到excuse函數的參數當中,這樣就能順利完成參數的傳入傳出。 -
3.這個revert_requirse就是我們在任務執行失敗之后進行恢復需要什么內容:
這個東西我們很少使用。
總結
以上是生活随笔為你收集整理的geyser学习记录(day1):将任务拆分的架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm环境调整
- 下一篇: geyser学习记录(day2):我们在