讨论函数链是因为它简单,未来终极形态是图
计算机的程序实际上是贯序执行的,贯序的长度也就是“逻辑深度”。中间如果出现了error,那么贯序执行链条就断了。
一般情况下碰到的问题是:
从整体上,我希望程序是比较健壮的,灵活的。但是从设计上,我们要假定程序是脆弱的,不可知的。为此,我断断续续做了很长时间的设计和探索,从最近的一次尝试来看我觉得可以再往前进一步。
先看一小段程序结果:这段逻辑通过对象的属性共享变量空间,并通过修饰器在每次执行的时候进行简单的比对和记录。

这段程序仍然不是我期望的形态,但是这种状态和我之前的几个设计很接近(有点记不清),说明方向还是对的(至少符合我的自洽测试,再尝试也就是类似的样子)。正好今天有点灵感,我想顺着思路把整个框架和实现方法再明确一些。
与之前不同的是,我已经对数据的持久化做了很多工作:
另外在研发分布式任务系统时,有些运行方面的机制应该和函数链的运行机制可以通用,等于是Level1的问题基本解决了,现在就专注在Level2,在大的机制方便,Level1和Level2是一样的。
如上面的截图,函数链中的函数执行时,需要:
para_dict,是一个字典,如果是空字典,意味着该函数会使用变量的默认值。这里我想可以再加一个约定:可调参以下划线开头。可调参指的是部分参数无法确定最优,希望通过算法进行自动搜索的参数。我希望对于任意一条数据,都可以随时调取它经过函数链的过程状态。
如果不想自己写异步,或者是矩阵计算,那么pandas的DataFrame似乎是一个非常好的选择
这里有一个前提是:每行记录都有一个主键字段。要处理的数据假定为listofdict, 这样才能有效率,也灵活,同时又能直接在接口间传递。

在运行时,规则总会向3个Frame中更新数据、规则状态和信息(Output),也会在执行时从Frame中读取数据和规则状态(Input),这里,每条规则的执行就很类似Lev1中的数据处理状态,只不过起点和终点都是在内存里。
除了初始规则,和无参规则,一般的规则都需要依赖Data Frame中的数据(列)。函数链是一环接一环的规则,所以通常每条规则也会依赖其他规则的结果。(depend_1_rules, depend_0_rules和depend_n1_rules)

每个规则的输入都会通过cols2s这个函数,将需要的变量转为seriesofdict,这样函数就可以apply了。
理想情况下,函数链从左到右应该是一一对应的。
函数链的中断
函数链的变矮
先写到这里,我觉得可以先搞一个对象出来。本来我是想顺着说从Flask蓝图模式得到的一点小灵感的,不过不着急,先做一点出来。