跳到主要内容

触发器

算盘绝大多数组件为数据消费者的角色,用于处理上一个节点发送来的数据。在部分场景中我们也需要数据生产者的角色。

!!! 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.inputapp.trigger.input
app.outputapp.trigger.output
app.paramapp.trigger.param
app.loadapp.trigger.load
app.sendapp.trigger.send
app.beforeInitapp.trigger.beforeInit
app.afterInitapp.trigger.afterInit
app.beforeCallapp.trigger.beforeCall
app.afterCallapp.trigger.afterCall
app.beforeExitapp.trigger.beforeExit

特有 API

触发器接口参数说明
app.trigger.looploop: Loop 对象配置触发器的主循环