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就是我们在任务执行失败之后进行恢复需要什么内容:
    这个东西我们很少使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CUHK-SZ-relu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值