触发器
算盘绝大多数组件为数据消费者的角色,用于处理上一个节点发送来的数据。在部分场景中我们也需要数据生产者的角色。
!!! info "提示"
触发器仅可用于服务组件
示例(定时器)
以下我们使用定时器组件进行演示:
基础
以下示例每隔 5s 向下一节点发送当前的消息编号(index):
import suanpan
from suanpan.app import app
from suanpan.app.arguments import Int
from suanpan.app.loops import IntervalIndex
loop = IntervalIndex(5)
@app.trigger.loop(loop)
@app.trigger.output(Int(key="outputData1", alias="index"))
def SPTrigger(context, n):
return n
if __name__ == "__main__":
suanpan.run(app)
可配置
以下示例能够读取右面板的参数配置:
import suanpan
from suanpan.app import app
from suanpan.app.arguments import Int, Float, Bool
from suanpan.app.loops import IntervalIndex
DEFAULT_INTERVAL = 5
loop = IntervalIndex(DEFAULT_INTERVAL)
@app.trigger.afterInit
def initTrigger(context):
args = context.args
loop.set(seconds=args.seconds, pre=args.pre, disabled=args.disabled)
@app.trigger.loop(loop)
@app.trigger.output(Int(key="outputData1", alias="index"))
@app.trigger.param(Float(key="param1", alias="seconds", default=DEFAULT_INTERVAL))
@app.trigger.param(Bool(key="param2", alias="pre", default=False))
@app.trigger.param(Bool(key="param3", alias="disabled", default=False))
def SPTrigger(context, n):
return n
if __name__ == "__main__":
suanpan.run(app)
循环
循环对象为触发器的主循环,其必须为可调用(callable)对象,且调用返回必须为可迭代对象
内置
循环 | 循环逻辑 | 触发时的返回值 |
---|---|---|
Loop | - | - |
Interval | 定时器 | None |
IntervalIndex | 定时器 | index(0,1,2,...) |
接口
触发器兼容所有组件 API
组件接口 | 触发器接口 |
---|---|
app.input | app.trigger.input |
app.output | app.trigger.output |
app.param | app.trigger.param |
app.load | app.trigger.load |
app.send | app.trigger.send |
app.beforeInit | app.trigger.beforeInit |
app.afterInit | app.trigger.afterInit |
app.beforeCall | app.trigger.beforeCall |
app.afterCall | app.trigger.afterCall |
app.beforeExit | app.trigger.beforeExit |
特有 API
触发器接口 | 参数 | 说明 |
---|---|---|
app.trigger.loop | loop: Loop 对象 | 配置触发器的主循环 |