初始化时解析文件并使所有类都可访问

时间:2016-10-14 19:35:00

标签: python python-2.7 oop pyramid

基本上,当金字塔应用程序启动时,我需要解析一个文件,并将该文件中的数据提供给整个应用程序。最重要的是,我需要监视文件的变化,它本质上是一个配置文件。当初始化Configurator时,我正在考虑制作一个单例并在app启动时初始化它。这是最好的方法吗,还是我应该遵循/考虑其他任何方法?

对不起,金字塔和python的新手,谢谢!

2 个答案:

答案 0 :(得分:1)

我们使用顶级app/config.py执行此操作(使用金字塔和全局应用程序设置),这只是配置变量列表(可能还有默认值)。然后在我们的main函数中加载配置并设置config模块的各种属性,以便应用程序可以使用它们。

例如,这里是app/config.py

image_dir = '/mnt/images'
s3_access_key = None  # these must be specified in the config INI
s3_secret_key = None

这是我们的配置INI的相关部分(例如:app/development.ini):

[app:main]
app.image_dir = ./test_images
app.s3_access_key = ABCD1234...
app.s3_secret_key = EFGH5678...

我们app/main.py中的相关配置加载代码:

from . import config

def main(global_config, **settings):
    config.image_dir = settings.get('app.image_dir', config.image_dir)
    config.s3_access_key = settings['app.s3_access_key']
    config.s3_secret_key = settings['app.s3_secret_key']

    configurator = Configurator(settings=settings)
    # ... configure and add routes
    configurator.scan()

    return configurator.make_wsgi_app()

然后其他应用程序代码可以只是from app import configfrom . import config并使用这些设置,例如:os.path.join(config.image_dir, 'my_image.jpg')

答案 1 :(得分:0)

正如许多地方所指出的,Singleton is considered a code smell因此应该避免。恕我直言,如果有合理的权衡,可以使用Singleton 。例如,如果使用Singleton可以显着提升性能。在您的情况下,情况可能就是这样:如果在您的应用程序的许多位置使用配置文件,多次读取该文件可能会影响您的性能。但是,如果您选择使用Singleton,请记住它带来的危险。

要回答你的问题,我认为不可能告诉你最好的最佳方式,因为这取决于你的特定应用。我只能建议您考虑每个选项的优缺点,并根据您的需要做出选择。