组件配置
大部分情况下,组件只需要根据输入计算输出,是没有状态的。有些组件事关整个模板的运行,需要记录所有数据的计算状态或结果,因此需要保存一些数据,便于模板重启之后能继续正确运行。
传统的方式需要组件开发者自己维护状态,将状态保存到容器内,并将其上传到对象存储,组件重启时从对象存储下载状态文件并恢复。这个过程比较麻烦,涉及多个 sdk api 的使用。
settings 能够帮助组件开发者简化这个过程,屏蔽内部细节。
!!! info "提示"
settings 在 sdk 0.17.13 之后支持
示例代码
import suanpan
from datetime import datetime
from suanpan.app import app
from suanpan.app.arguments import String
from suanpan.log import logger
from suanpan import settings
@app.input(String(key="inputData1"))
@app.output(String(key="outputData1"))
def HelloWorld(context):
args = context.args
logger.info(f'hello {args}')
logger.info(f'hello settings {settings.time}')
settings.time = datetime.now()
logger.info(f'hello new time {settings.time}')
return "Hello world"
if __name__ == "__main__":
suanpan.run(app)
结果
说明
from suanpan import settings
首先需要 import settings,settings 是一个实例,通过 settings.myvalue 来访问。myvalue 可以是任意开发者想要的配置名称。
settings.time = int(time.time()) 这行代码将 time 设置为当前时间,sdk 会自动将配置文件保存并同步到对象存储中。
logger.info(f'hello settings {settings.time}') 这个第一次运行时,sdk 会判断 settings 是否已经初始化,若未初始化,sdk 自动从对象存储下载配置文件,并初始化 settings 实例,然后将 time 字段返回给用户。
settings 使用 pickle 将配置转换成文件,所以 settings 能支持所有 python 的数据格式。