自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

優(yōu)雅地加載Yaml配置文件

開發(fā) 開發(fā)工具
今天我們來介紹一個(gè)先進(jìn)的工具,專門用來高效加載配置文件。這就是Facebook開源的Hydra。

我在多篇文章里面都說過,我非常喜歡使用Yaml格式來寫配置文件,Yaml是一個(gè)對(duì)人非常友好的配置格式。

有時(shí)候,我們?cè)陂_發(fā)環(huán)境、測(cè)試環(huán)境和線上環(huán)境會(huì)有多套不同的配置文件,如何在不修改代碼的情況下方便的切換配置文件呢?我以前的文章講過一種方法,使用環(huán)境變量來指定配置文件名。今天我們來介紹一個(gè)更先進(jìn)的工具,專門用來高效加載配置文件。這就是Facebook開源的Hydra。

這個(gè)工具有多簡(jiǎn)單呢?我們先寫兩個(gè)配置文件,然后看看怎么讀取它:

使用pip安裝Hydra:

python3 -m pip install hydra-core

接下來,我們寫一段代碼,來讀取配置文件:

import os
import hydra
from omegaconf import DictConfig

env = os.getenv('DATA_CENTER', 'dev')
@hydra.main(config_path="config", config_name=env)
def main(cfg: DictConfig):
print('MongoDB鏈接地址是:', cfg.mongo.uri)
print('Redis的key是:', cfg.redis.key)
print('黑名單是:', cfg.detail.black_list)


if __name__ == '__main__':
main()

運(yùn)行效果如下圖所示:

其中,裝飾器hydra.main的參數(shù)config_path指定存放配置文件的文件夾,config_name用來指定配置文件的名字(去掉.yaml)。

這樣一來,我們可以通過環(huán)境變量指定要使用哪個(gè)配置文件。

這樣看起來似乎跟我以前講的方法沒什么區(qū)別啊。那么,高級(jí)的功能來了。例如現(xiàn)在我使用dev環(huán)境時(shí),臨時(shí)想修改一下Redis的Key怎么辦呢?以前的方法,我就必須去修改Yaml文件,把Key改掉。但是,既然是臨時(shí)修改,測(cè)試完了又要改回來,顯然非常麻煩。

使用Hydra,這個(gè)問題就不再是問題了。我們來看看直接在命令中覆蓋數(shù)據(jù)的方法:

請(qǐng)看圖中,我代碼沒有做任何修改,Yaml也沒有做任何修改。只需要在啟動(dòng)命令的時(shí)候增加一個(gè)參數(shù)redis.key=new_key,那么程序讀取到的就是新的值了。這對(duì)臨時(shí)測(cè)試的時(shí)候非常有用。

除了我上面介紹的這些,Hydra還可以實(shí)現(xiàn)自動(dòng)補(bǔ)全,自動(dòng)提示參數(shù)名,自動(dòng)以多個(gè)不同的配置連續(xù)運(yùn)行等等功能。

最后,我補(bǔ)充一個(gè)點(diǎn)。有同學(xué)在公眾號(hào)粉絲群提問,Hydra為什么不能在調(diào)用函數(shù)的時(shí)候,傳遞額外的參數(shù),例如下面這樣寫就會(huì)報(bào)錯(cuò):

這是因?yàn)?,Hydra的裝飾對(duì)象應(yīng)該是程序的入口函數(shù)。給入口函數(shù)傳遞參數(shù)是很奇怪的。如果你的入口函數(shù)要根據(jù)參數(shù)的不同值執(zhí)行不同的邏輯,那么這個(gè)參數(shù)你完全可以放到配置文件中。而不是用函數(shù)參數(shù)來傳入。

所以,這里報(bào)錯(cuò)應(yīng)該是功能而不是bug。本來就不應(yīng)該在入口函數(shù)中添加額外的參數(shù)。

責(zé)任編輯:趙寧寧 來源: 未聞Code
相關(guān)推薦

2021-03-24 10:20:50

Fonts前端代碼

2009-09-25 10:49:25

Hibernate加載

2025-03-28 08:34:34

2010-02-02 18:19:52

Linux mplay

2023-11-01 08:30:20

SpringYAML

2024-04-23 14:13:38

開發(fā)配置文件

2011-01-19 14:00:21

2011-01-13 16:27:26

Linux配置文件

2020-04-03 13:45:16

刪除Linux垃圾文件

2020-02-24 11:12:01

Linux電腦數(shù)據(jù)

2010-12-28 16:35:32

Outlook 配置文

2010-12-27 14:59:31

Outlook 配置文

2022-03-23 07:31:34

SpringBoot加載配置

2020-02-13 09:51:13

修復(fù)Windows 10配置文件

2024-11-13 16:37:00

Java線程池

2010-08-05 14:36:07

NFS服務(wù)

2010-05-05 16:14:09

Unix管理

2011-03-25 17:13:37

Nagios配置文件

2009-09-22 10:23:15

Hibernate配置

2011-01-21 15:27:10

Sendmail
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)