首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

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

  •  
  •   firejoke · 114 天前 · 1988 次点击
    这是一个创建于 114 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    请使用 python 里最牛逼的配置文件库 oslo.cfg
        21
    firejoke   111 天前
    @lolizeppelin 看 openstack 时, 看过 oslo 的用法, 没有仔细研究过, 确实可以试试
        22
    firejoke   111 天前
    @raighne 这个有点大材小用了
        23
    lolizeppelin   111 天前
    @firejoke
    熟悉以后 只要你还用 py, 这玩意可以用不少年
    不 py 语言允许都可以抄一份
        24
    firejoke   111 天前
    @lolizeppelin 好! 之后也要搞 openstack, 大不了我把离线包加到依赖包里, 装我这个工具的时候, 直接装进去
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2065 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 12:02 · PVG 20:02 · LAX 05:02 · JFK 08:02
    ♥ Do have faith in what you're doing.