• 建模杂谈系列158 再探函数链的实现


    说明

    讨论函数链是因为它简单,未来终极形态是图

    计算机的程序实际上是贯序执行的,贯序的长度也就是“逻辑深度”。中间如果出现了error,那么贯序执行链条就断了。

    一般情况下碰到的问题是:

    • 1 怎么我的处理没有反应? (程序出现错误断了)
    • 2 为啥是这个处理结果?(逻辑深度太深,不明白为什么出现了意料之外的结果)

    从整体上,我希望程序是比较健壮的,灵活的。但是从设计上,我们要假定程序是脆弱的,不可知的。为此,我断断续续做了很长时间的设计和探索,从最近的一次尝试来看我觉得可以再往前进一步。

    先看一小段程序结果:这段逻辑通过对象的属性共享变量空间,并通过修饰器在每次执行的时候进行简单的比对和记录。
    在这里插入图片描述
    这段程序仍然不是我期望的形态,但是这种状态和我之前的几个设计很接近(有点记不清),说明方向还是对的(至少符合我的自洽测试,再尝试也就是类似的样子)。正好今天有点灵感,我想顺着思路把整个框架和实现方法再明确一些。

    与之前不同的是,我已经对数据的持久化做了很多工作:

    • 1 数据的存储规范比较明确。例如元数据存在mymeta集群。
    • 2 数据的存储工具比较完善。通过句柄工具 + 微服务,现在几乎真的可以在内存对象和数据库间轻易切换。

    另外在研发分布式任务系统时,有些运行方面的机制应该和函数链的运行机制可以通用,等于是Level1的问题基本解决了,现在就专注在Level2,在大的机制方便,Level1和Level2是一样的。

    内容

    1 函数链执行的关键参数

    如上面的截图,函数链中的函数执行时,需要:

    • 1 调用顺序
    • 2 函数名
    • 3 函数参数:如果参数None就是无参函数,有时候有些函数是这样的。如果有参,那么该参数名称是para_dict,是一个字典,如果是空字典,意味着该函数会使用变量的默认值。这里我想可以再加一个约定:可调参以下划线开头。可调参指的是部分参数无法确定最优,希望通过算法进行自动搜索的参数。
    • 4 时长:这个还是比较重要的
    • 5 新变量:每一步的函数处理,都可以给变量空间增加新的变量。

    我希望对于任意一条数据,都可以随时调取它经过函数链的过程状态。

    2 Frames

    如果不想自己写异步,或者是矩阵计算,那么pandas的DataFrame似乎是一个非常好的选择

    这里有一个前提是:每行记录都有一个主键字段。要处理的数据假定为listofdict, 这样才能有效率,也灵活,同时又能直接在接口间传递。

    在这里插入图片描述
    在运行时,规则总会向3个Frame中更新数据、规则状态和信息(Output),也会在执行时从Frame中读取数据和规则状态(Input),这里,每条规则的执行就很类似Lev1中的数据处理状态,只不过起点和终点都是在内存里。

    3 Rule Status

    除了初始规则,和无参规则,一般的规则都需要依赖Data Frame中的数据(列)。函数链是一环接一环的规则,所以通常每条规则也会依赖其他规则的结果。(depend_1_rules, depend_0_rules和depend_n1_rules)
    在这里插入图片描述
    每个规则的输入都会通过cols2s这个函数,将需要的变量转为seriesofdict,这样函数就可以apply了。

    理想情况下,函数链从左到右应该是一一对应的。

    函数链的中断

    • 如果依赖的变量集合不存在(Data Frame),那么函数链就会中断
    • 如果依赖的规则结果村存在,那么函数链终端
    • 当Data Frame长度为0时,那么函数链中断

    函数链的变矮

    • 函数链采用选择-执行的方法尽可能执行
    • 如果有异常数据,那么在执行中就会剔除,该id就不会有当前步骤的结果
    • 后续步骤是依赖当前步骤的,所以下一次的Data Frame 数量就变少。

    先写到这里,我觉得可以先搞一个对象出来。本来我是想顺着说从Flask蓝图模式得到的一点小灵感的,不过不着急,先做一点出来。

  • 相关阅读:
    搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用
    【Hack The Box】linux练习-- time
    抖音获取douyin分享口令url API 返回值说明
    如何做一个基于 Python 的搜索引擎?
    RSA加密与签名的区别
    空气开关(空开)
    Mysql热备增量备份与恢复(-)--备份部分
    青龙面板安装及配置
    【LeetCode每日一题:808.分汤~~~边界条件的特判+记忆化搜索】
    学习记录609@python实现数据样本的过采样与欠采样
  • 原文地址:https://blog.csdn.net/yukai08008/article/details/126889763