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

2019-05-24 09:53:29 +08:00
 firejoke

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

3272 次点击
所在节点    Python
24 条回复
THESDZ
2019-05-24 09:55:58 +08:00
缓存中读取,避免脏读即可
firejoke
2019-05-24 10:07:10 +08:00
@THESDZ 关键是如何优雅的避免脏读呢?
besttime
2019-05-24 10:10:58 +08:00
配置中心服务了解一下?
dapang1221
2019-05-24 10:12:46 +08:00
正常应该是接受处理 USR1 信号,平滑重载更新配置缓存吧,你总不能开着文件句柄一直读,太难受了…
firejoke
2019-05-24 10:16:44 +08:00
@dapang1221 我原帖内最后就是这样, 启动时先载入配置缓存, 有修改时先修改文档, 在重新加载到缓存, 但我的方式感觉读取配置时怪怪的
firejoke
2019-05-24 10:17:57 +08:00
@besttime 小工具用不上这个吧?
pmispig
2019-05-24 10:18:30 +08:00
增加一个接口,被调用时从外部拉取配置更新到内存里,我的 openrestry 就是这么操作的
firejoke
2019-05-24 10:23:54 +08:00
@pmispig 那你在其他地方引用该配置的时候, 是用的时候在引用吗?
还是在开头就引用了?
也就是
from conf import xxx

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

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

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

请使用 python 里最牛逼的配置文件库 oslo.cfg

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX