用什么姿势读取配置文档更优雅? 会在运行时更改的那种 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
firejoke
V2EX    Python

用什么姿势读取配置文档更优雅? 会在运行时更改的那种

  •  
  •   firejoke 2019 年 5 月 24 日 3822 次点击
    这是一个创建于 2497 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原帖: /t/567079
    本来选的 python 节点,
    可能因为"大家", "都是", "怎样" "?" 这些关键字, 被移动到调查节点了
    有个需求是可能会在运行中修改配置文档, 然后其他同样引用了该配置的模块也能拿到新的值
    代码在原帖内

    24 条回复    2019-05-27 11:27:06 +08:00
    THESDZ
        1
    THESDZ  
       2019 年 5 月 24 日
    缓存中读取,避免脏读即可
    firejoke
        2
    firejoke  
    OP
       2019 年 5 月 24 日
    @THESDZ 关键是如何优雅的避免脏读呢?
    besttime
        3
    besttime  
       2019 年 5 月 24 日
    配置中心服务了解一下?
    dapang1221
        4
    dapang1221  
       2019 年 5 月 24 日
    正常应该是接受处理 USR1 信号,平滑重载更新配置缓存吧,你总不能开着文件句柄一直读,太难受了…
    firejoke
        5
    firejoke  
    OP
       2019 年 5 月 24 日
    @dapang1221 我原帖内最后就是这样, 启动时先载入配置缓存, 有修改时先修改文档, 在重新加载到缓存, 但我的方式感觉读取配置时怪怪的
    firejoke
        6
    firejoke  
    OP
       2019 年 5 月 24 日
    @besttime 小工具用不上这个吧?
    pmispig
        7
    pmispig  
       2019 年 5 月 24 日
    增加一个接口,被调用时从外部拉取配置更新到内存里,我的 openrestry 就是这么操作的
    firejoke
        8
    firejoke  
    OP
       2019 年 5 月 24 日
    @pmispig 那你在其他地方引用该配置的时候, 是用的时候在引用吗?
    还是在开头就引用了?
    也就是
    from conf import xxx

    class X():
    def xx():
    XXX
    还是

    class X():
    def xx():
    from conf import xxx
    XXX
    mooncakejs
        9
    mooncakejs  
       2019 年 5 月 24 日
    赞同#4
    pmispig
        10
    pmispig  
       2019 年 5 月 24 日
    @firejoke 简化来说的话就是 global cOnfig= {} , 全局变量,不过细化来说的话还涉及到读写锁
    julyclyde
        11
    julyclyde  
       2019 年 5 月 24 日
    一般是 HUP 信号吧
    firejoke
        12
    firejoke  
    OP
       2019 年 5 月 24 日
    @dapang1221 抱歉, 我去认真看一下 USR1 和如何应用
    firejoke
        13
    firejoke  
    OP
       2019 年 5 月 24 日
    @pmispig 我原帖的举例就是 gloabl cOnf=dict(), 不过没涉及到独写锁, 你提醒了我
    zgzhang
        14
    zgzhang  
       2019 年 5 月 24 日
    @pmispig openrestry 在 init-worker 阶段可以注册定时器,你这样相当于每个请求都耦合了一次配置刷新的操作
    firejoke
        15
    firejoke  
    OP
       2019 年 5 月 24 日
    @dapang1221 看 USR1 的应用, 以及 uwsgi 的配置文档重启, 但那个适合静态的配置, 改一次重启一次服务,
    可我只想依赖这个配置的模块能获取到新的值, 并不想重启整个服务, 因为我这只是一个工具, 并不会涉及到并发之类的
    dapang1221
        16
    dapang1221  
       2019 年 5 月 24 日
    @firejoke 不是重启整个服务啊,python 里用 signal 模块可以捕获到 USR1 或是上面 11#提到的 HUP 信号,然后你自己处理就好了,并不是让系统去给你重启
    leegoo
        17
    leegoo  
       2019 年 5 月 24 日
    可以借鉴配置中心...或者说可以把配置写在数据库里面,系统文件里面都行...
    THESDZ
        18
    THESDZ  
       2019 年 5 月 24 日
    @firejoke 合理的事务控制,中心化配置
    raighne
        19
    raighne  
       2019 年 5 月 24 日
    用 apollo
    lolizeppelin
        20
    lolizeppelin  
       2019 年 5 月 25 日
    inotify 监控配置文件,有变更就调用重载配置函数

    配置文件的库的库最好支持参数设置是否可以热重载

    请使用 python 里最牛逼的配置文件库 oslo.cfg
    firejoke
        21
    firejoke  
    OP
       2019 年 5 月 27 日
    @lolizeppelin 看 openstack 时, 看过 oslo 的用法, 没有仔细研究过, 确实可以试试
    firejoke
        22
    firejoke  
    OP
       2019 年 5 月 27 日
    @raighne 这个有点大材小用了
    lolizeppelin
        23
    lolizeppelin  
       2019 年 5 月 27 日
    @firejoke
    熟悉以后 只要你还用 py, 这玩意可以用不少年
    不 py 语言允许都可以抄一份
    firejoke
        24
    firejoke  
    OP
       2019 年 5 月 27 日
    @lolizeppelin 好! 之后也要搞 openstack, 大不了我把离线包加到依赖包里, 装我这个工具的时候, 直接装进去
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 23:32 PVG 07:32 LAX 16:32 JFK 19:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86