如何有效地定义每日常数?

时间:2014-08-28 08:01:40

标签: python database performance postgresql flask

使用(真棒)Python Flask framework,我正在建立一个网站,我有3个“常量”,每天早上都会改变(所以我的常数不是很稳定,我知道,但仍然)。我几乎每次调用webserver(页面和API请求)都需要这些常量,所以我希望检索这些常量非常有效。

我想定义这些常量的最有效方法是每天早上在代码中手动设置它们。但由于我很懒,编程背后的想法是自动化,我认为没有理由以不同的方式处理这个问题。这就是为什么我想到了3种不同的方式;

  1. 将常量存储在数据库中(我使用Postgres作为我的网站)
  2. 将常量存储在我加载的小文件中。
  3. 将常量存储在速度更快的键值存储中,例如Redis
  4. 但:

    1. 将它们存储在我的postgres数据库中当然很容易,但为3条单个记录创建一个完整的单独表格,我每天都要覆盖这些记录并不合乎逻辑。
    2. 为每个请求打开一个文件也需要时间,虽然基准测试显然会说明答案。
    3. 设置一个完整的redis服务器(我之前从未做过,但似乎是一个很酷的挑战)对于我想要存储的简单事物来说似乎有些过分。
    4. 我有一个想法,我忽略了一个非常简单的酷伎俩,我根本无法想到。谁能告诉我最聪明的事情是什么?欢迎提出所有提示和想法!

2 个答案:

答案 0 :(得分:2)

您也可以使用环境变量。

检索“常量”时,请在环境中设置它:

import os
os.environ['MY_DAILY_CONST_1'] = 'dailyconst1'
os.environ['MY_DAILY_CONST_2'] = 'dailyconst2'
...

当你必须访问它时:

import os
myconst1 = os.environ['MY_DAILY_CONST_1']
...

答案 1 :(得分:1)

由于您正在使用Flask,您还可以将常量保存为应用程序级别的全局变量。

from flask import Flask
app = Flask('my_app')

constant1, constant2, constant3 = retrieve_constants()

app.jinja_env.globals['constant1'] = constant1
app.jinja_env.globals['constant2'] = constant2
app.jinja_env.globals['constant3'] = constant3