Gramex调度器能否从文件或数据库获取动态调度值?
能否从文件等动态源获取定时任务配置中的动态值?
当然可以,有几种实用的实现方式:
用YAML预处理工具替换
借助yq这类YAML处理工具,在加载配置前从外部文件读取值替换占位符:- 准备存储时间值的文件
time-config.yml:scheduled_hour: 2 scheduled_minute: 30 - 执行替换命令生成最终配置:
yq eval '.create-job-once-a-day.hours = load("time-config.yml").scheduled_hour | .create-job-once-a-day.minutes = load("time-config.yml").scheduled_minute' your-config.yml > updated-config.yml
- 准备存储时间值的文件
在代码加载时动态替换
如果你的YAML配置由Python代码加载,可在读取配置后从外部文件取值替换:import yaml # 读取主配置文件 with open('your-config.yml', 'r') as f: config = yaml.safe_load(f) # 从文本文件读取时间值(示例格式为一行两个数字:小时 分钟) with open('time-values.txt', 'r') as f: hour, minute = map(int, f.read().strip().split()) # 更新配置中的动态字段 config['create-job-once-a-day']['hours'] = hour config['create-job-once-a-day']['minutes'] = minute # 后续用更新后的配置初始化定时任务结合环境变量使用
把时间值存入环境变量,再在代码中解析配置时替换:- 设置环境变量:
export SCHEDULED_HOUR=2 export SCHEDULED_MINUTE=30 - 修改YAML配置:
create-job-once-a-day: hours: ${SCHEDULED_HOUR} minutes: ${SCHEDULED_MINUTE} thread: true function: > logging.critical('HELLO') - 代码中解析并替换:
from environs import Env import yaml env = Env() env.read_env() with open('your-config.yml', 'r') as f: config = yaml.safe_load(f) config['create-job-once-a-day']['hours'] = env.int('SCHEDULED_HOUR') config['create-job-once-a-day']['minutes'] = env.int('SCHEDULED_MINUTE')
- 设置环境变量:
内容的提问来源于stack exchange,提问作者shraddheya shrivastava
相关产品推荐
相关产品推荐

