【发布时间】:2016-10-06 06:14:43
【问题描述】:
在我维护的一个 Django 网站(v 1.7)中,我将每天 24 小时分成不同的时间窗口,然后根据用户登录的时间窗口,我为所述用户处理一些内容。日期无关紧要,重要的是时间窗口。
目前,时间窗口及其相关处理是在我的 views.py 中的一个函数中完成的,如下所示:
from datetime import time as time_object
def WhichWindow(time_now):
window1_least = time_object(hour=0, minute=0)
window1_most = time_object(hour=3, minute=0)
window2_least = time_object(hour=3, minute=0)
window2_most = time_object(hour=6, minute=30)
window3_least = time_object(hour=6, minute=30)
window3_most = time_object(hour=11, minute=50)
window4_least = time_object(hour=11, minute=50)
window4_most = time_object(hour=14, minute=55)
window5_least = time_object(hour=14, minute=55)
window5_most = time_object(hour=16, minute=55)
window6_least = time_object(hour=16, minute=55)
window6_most = time_object(hour=20, minute=0)
window7_least = time_object(hour=20, minute=0)
window7_most = time_object(hour=0, minute=0)
if window1_least <= time_now < window1_most:
variable1 = #something
variable2 = #something
variable3 = #something
elif window2_least <= time_now < window2_most:
variable1 = #something
variable2 = #something
variable3 = #something
elif window3_least <= time_now < window3_most:
variable1 = #something
variable2 = #something
variable3 = #something
elif window4_least <= time_now < window4_most:
variable1 = #something
variable2 = #something
variable3 = #something
elif window5_least <= time_now < window5_most:
variable1 = #something
variable2 = #something
variable3 = #something
elif window6_least <= time_now < window6_most:
variable1 = #something
variable2 = #something
variable3 = #something
elif window7_least <= time_now < window7_most:
variable1 = #something
variable2 = #something
variable3 = #something
else:
variable1 = #something
variable2 = #something
variable3 = #something
return variable1, variable2, variable3
注意:函数中的time_now本质上是datetime.now().time()。
每个用户都非常频繁地访问上述功能。我觉得如果我 cache 我的时间窗口定义,这将是一个性能提升。
我该怎么办?我是否应该在此函数之上简单地添加 @cache_page(60 * 60 * 24) 装饰器?我觉得如果我这样做,那也会缓存这个函数的结果,而我只想缓存时间窗口定义。所以我该怎么做?
请提供实现此目的的最佳执行方式,并提供说明性示例。我是一个新手,并且仍然围绕着这些概念中的大多数。
【问题讨论】:
-
“这也会缓存这个函数的结果”……是的,这就是缓存的作用。不想缓存结果,怎么缓存函数?
-
@syntonym:我只想缓存时间窗口定义。它们是静态的,不会改变。
-
然后您可以将它们移出模块中的函数(或者,如果您愿意,可以移出不同的模块或类)。
-
函数做一些事情,因为你有一些静态数据。你应该把它放在静态的地方,而不是创建一个函数并缓存它。
标签: python django performance caching