python读取yaml配置文件的方法
yaml简介
1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似于json格式
2.yaml基本语法规则:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
3.yaml支持的数据结构有三种:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
安装yaml
1.使用pip安装pyyaml模块
pip install pyyaml
安装之后-找zhoupan安装的 --20240425
cfg.yaml文件
# celery config backend: redis://127.0.0.1:6379 broker: redis://127.0.0.1:6380 # monitor config tower_url : http://7.xx.11.230:7894 chrono_url : http://xx.169.50.233:8090
celery.py文件
#!/usr/bin/env python3 # -*- coding:utf-8 -*- """ celery配置文件 """ import celery from celery.schedules import crontab from datetime import timedelta import yaml import os from yaml import Loader # 获取当前脚本所在文件夹路径 curPath = os.path.abspath(os.path.join(os.getcwd())) # 获取yaml文件路径 yamlPath = os.path.join(curPath, "cfg.yaml") print(yamlPath) # open方法打开直接读出来 f = open(yamlPath, 'r', encoding='utf-8') cfg = f.read() d = yaml.load(cfg, Loader=Loader) # 用load方法转字典 # 任务存储的数据库 backend = d.get('backend') # 消息中间件 broker = d.get('broker') cel = celery.Celery('celery_demo', backend=backend, broker=broker, # 包含以下两个任务文件,去相应的py文件中找任务,对多个任务做分类 include=[ 'celery_tasks.task_execute_pre', 'celery_tasks.task_execute_post', 'celery_tasks.task_execute_main', 'celery_tasks.task_query', 'celery_tasks.task_status', 'celery_tasks.process_task' ]) # 时区 cel.conf.timezone = 'Asia/Shanghai' # 是否使用UTC cel.conf.enable_utc = False # 添加定时调度器 cel.conf.beat_schedule = { # 每一个元素都是一个定时任务,每一个元素的key是定时任务的名称 'task_execute_main': { 'task': 'celery_tasks.task_execute_main.execute_main_task', "schedule": timedelta(seconds=10), # 'schedule': crontab(minute="*/2"), 'args': ('task_execute_main',) }, 'task_execute_post': { 'task': 'celery_tasks.task_execute_post.execute_post_task', "schedule": timedelta(seconds=10), # 'schedule': crontab(minute="*/2"), 'args': ('task_execute_post',) }, 'task_execute_pre': { 'task': 'celery_tasks.task_execute_pre.execute_pre_task', "schedule": timedelta(seconds=10), # 'schedule': crontab(minute="*/2"), 'args': ('task_execute_pre',) }, 'task_query': { 'task': 'celery_tasks.task_query.parse_job_id', "schedule": timedelta(seconds=10), # 'schedule': crontab(minute="*/2"), 'args': ('task_query',) }, 'task_status': { 'task': 'celery_tasks.task_status.query_job_status', "schedule": timedelta(seconds=10), # 'schedule': crontab(minute="*/2"), 'args': ('task_status',) }, 'process_task': { 'task': 'celery_tasks.process_task.process_task', "schedule": timedelta(seconds=10), # 'schedule': crontab(minute="*/2"), 'args': ('process_task',) } }
参考博客:https://blog.csdn.net/zhusongziye/article/details/80024426