2014-08-28 90 views
0

使用(真棒)Python Flask framework,我正在建立一個網站,爲此我有3個「常量」每天早上都會改變(所以我的常量不是很穩定,但我知道,但仍然)。我幾乎每次調用Web服務器(包括頁面和API請求)都需要這些常量,所以我希望這些常量的檢索非常高效。如何有效定義日常常量?

我想最有效的方法來定義這些常量是每天早上在代碼中手動設置它們。但由於我很懶,編程背後的想法是讓事情自動化,我沒有理由以不同的方式處理。這就是爲什麼我想到3種不同的方式;

  1. 儲存在一個數據庫中的常數(我用我的網站的Postgres)
  2. 商店的常量,我在加載一個小文件。
  3. 商店更速度常數優化的關鍵值商店,如Redis

但:

  1. 存放於我的Postgres數據庫當然是容易的,但創建一個福我將單獨記錄3張單獨記錄,這些記錄每天都會被覆蓋,這看起來並不合乎邏輯。
  2. 爲每個請求打開一個文件也需要時間,雖然基準測試顯然會告訴答案。
  3. 設置一個完整的redis服務器(我從來沒有做過,但看起來像一個很酷的挑戰)也似乎有點矯枉過正,我想存儲的簡單的東西。

我有這樣的想法,我忽略了一個非常簡單的很酷的技巧,我無法想象。有誰能夠啓發我什麼是最聰明的事情嗎?歡迎所有提示和想法!

+0

難道這些常量是不可計算的,以免存儲它們? 我的意思是你可以使用年/月/日的組合嗎? – Simpom 2014-08-28 08:23:12

+0

你能給我們舉個「常數」值的例子嗎? – Dragu 2014-08-28 08:27:04

+0

@Simpom - 不幸的不是。我使用API​​調用從外部源獲取它們。 – kramer65 2014-08-28 08:27:46

回答

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

由於您使用的瓶,你還可以保存常量作爲應用程序級別的全局變量。

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