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.191.11.230:7894 chrono_url : http://10.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