【问题标题】:How to efficiently define daily constant?如何有效地定义每日常数?
【发布时间】:2014-08-28 08:01:40
【问题描述】:

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

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

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

但是:

  1. 将它们存储在我的 postgres 数据库中当然很容易,但是为我每天要覆盖的 3 条单条记录创建一个完整的单独表似乎并不合乎逻辑。
  2. 为每个请求打开一个文件也需要时间,尽管基准测试显然会给出答案。
  3. 设置一个完整的 redis 服务器(我以前从未做过,但似乎是一个很酷的挑战)对于我想要存储的简单内容来说似乎有点矫枉过正。

我有一个想法,我忽略了一个非常简单的酷技巧,我只是想不出。有人能告诉我什么是最聪明的做法吗?欢迎所有提示和想法!

【问题讨论】:

  • 难道这些常量不是可计算的,因此不必存储它们吗?我的意思是你可以使用年/月/日的组合吗?
  • 你能给我们举个“常量”值的例子吗?
  • @Simpom - 不幸的是没有。我使用 API 调用从外部来源获取它们。
  • @Dragu - 常量是简单的浮点数:例如 123.456..

标签: python database performance postgresql flask


【解决方案1】:

你也可以使用环境变量。

当您检索“常量”时,您将其设置在环境中:

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']
...

【讨论】:

    【解决方案2】:

    由于您使用的是 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
    

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多