一个简单的代理驱动的DAG合成和执行框架
factum的Python项目详细描述
Factum公司
如果每个函数都记住自己的输出,并且知道何时何地获取自己的输入,会怎么样?
Factum是一个简单的基于agent的框架,用于计算DAG的合成和执行。在
理论
面向对象编程(OOP)最初被认为是串行计算环境中分布式函数编程的参与者模型的抽象。在
Factum代表着一种简单的回归。它是一个由面向对象的实现促进的功能范式。在
这个想法的核心是Fact
对象:一个定义inputs
、function
和output
的类。输入是可以改变的,但它们不是故意的。因此Factum代表了特定上下文中的功能:事实-它总是代表相同的信息。在
它基本上是一个负责收集自己的输入并缓存其输出的函数(因此其他函数对象可以有效地收集自己的输入)。在
这些Fact
对象被连接起来,要求彼此输入,并且通常形成一个有向无环图,尽管没有强制DAG结构的机制。在
使用
from factum import Fact
def a_node():
print('A running!')
return 1
def b_node():
print('B running!')
return 2
def c_node(*args):
print('C running!')
return args[0] + args[1]
def d_node(self, **kwargs):
return self._transformation(**kwargs)
def _transformation(self, cthing):
print('D running!')
return cthing + 1
# Fact(function, inputs, name)
a = Fact(a_node)
b = Fact(b_node, None, 'Beta')
c = Fact(c_node)
a > c
b > c
d = Fact(d_node, {'cthing': c})
d.add_method(_transformation)
d.run()
>>> A running!
>>> B running!
>>> C running!
>>> D running!
>>> 4
# cached
d.run()
>>> 4
b.run(-1)
>>> B running!
>>> 2
# re-runs downstream of change
d.run()
>>> C running!
>>> D running!
>>> 4
d.visualize()
- 项目
标签: