我有一个包含多个模块的应用程序。我现在处于这样一个阶段,即添加配置然后将其分发到需要它的组件,这将变得乏味且非常复杂。
我可以与每个类共享整个配置,因为我实例化它们,但我觉得应该有更好的方法。
我尝试过使用以下方法(为简洁起见):
__主__。PY
import json
from myapp.module import MyClass
with open('config.json', 'r') as f:
config = json.load(f)
globals()['config'] = config
x = MyClass()
module.py
def MyClass:
def __init__(self):
print(globals()['config'])
但看起来globals()
不是真正的全球:
$ python -m myapp
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/attie/myapp/__main__.py", line 9, in <module>
x = MyClass()
File "myapp/module.py", line 3, in __init__
print(globals()['config'])
KeyError: 'config'
另一种方法可能是生成一个Config
类,它只被实例化一次,并被系统的各个组件使用......但是我不知道如何解决这个问题。在C中我使用pthread_once()
或类似的。
我希望尽可能避免多次读取,解析和处理配置 - 除了启动性能之外,这样做的一个主要好处是可以从其他模块观察到来自一个模块的配置的运行时更新模块。
以这种方式在应用程序中分发配置(或其他内容)的好方法是什么?