Python 在Django中缓存包含某些常量的函数
在我维护的Django网站(v1.7)中,我将每天24小时划分为不同的时间窗口,然后根据用户登录的时间窗口,我为所述用户处理一些内容。日期不重要,重要的是时间窗 目前,时间窗口及其相关处理在myviews.py中的函数中完成,如下所示:Python 在Django中缓存包含某些常量的函数,python,django,performance,caching,Python,Django,Performance,Caching,在我维护的Django网站(v1.7)中,我将每天24小时划分为不同的时间窗口,然后根据用户登录的时间窗口,我为所述用户处理一些内容。日期不重要,重要的是时间窗 目前,时间窗口及其相关处理在myviews.py中的函数中完成,如下所示: from datetime import time as time_object def WhichWindow(time_now): window1_least = time_object(hour=0, minute=0) window1_
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
从日期时间导入时间作为时间对象
def哪个窗口(现在时间):
window1\u最小值=时间\u对象(小时=0,分钟=0)
window1\u most=时间\u对象(小时=3,分钟=0)
window2\u最小值=时间\u对象(小时=3,分钟=0)
window2\u most=时间对象(小时=6,分钟=30)
窗口3\u最少=时间\u对象(小时=6,分钟=30)
window3\u most=时间对象(小时=11,分钟=50)
window4\u最少=时间\u对象(小时=11,分钟=50)
window4\u most=时间对象(小时=14,分钟=55)
窗口5\u最小=时间\u对象(小时=14,分钟=55)
window5\u most=时间对象(小时=16,分钟=55)
窗口6\u最小=时间\u对象(小时=16,分钟=55)
window6\u most=时间对象(小时=20,分钟=0)
window7\u最小值=时间\u对象(小时=20,分钟=0)
window7\u most=时间\u对象(小时=0,分钟=0)
如果window1\u至少如果声明是静态的,则可以将它们移出函数。因此,它们不会在每次函数运行时执行:
from datetime import time as time_object
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)
def WhichWindow(time_now):
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
从日期时间导入时间作为时间对象
window1\u最小值=时间\u对象(小时=0,分钟=0)
window1\u most=时间\u对象(小时=3,分钟=0)
window2\u最小值=时间\u对象(小时=3,分钟=0)
window2\u most=时间对象(小时=6,分钟=30)
窗口3\u最少=时间\u对象(小时=6,分钟=30)
window3\u most=时间对象(小时=11,分钟=50)
window4\u最少=时间\u对象(小时=11,分钟=50)
window4\u most=时间对象(小时=14,分钟=55)
窗口5\u最小=时间\u对象(小时=14,分钟=55)
window5\u most=时间对象(小时=16,分钟=55)
窗口6\u最小=时间\u对象(小时=16,分钟=55)
window6\u most=时间对象(小时=20,分钟=0)
window7\u最小值=时间\u对象(小时=20,分钟=0)
window7\u most=时间\u对象(小时=0,分钟=0)
def哪个窗口(现在时间):
如果Windows 1>至少如果你真的需要提高性能,你应该考虑重新组织Windows,因为它们是从午夜开始检查的(可能不是你拥有最多流量的时候)。
作为第二种方法,您可以这样做:
from datetime import datetime, time
windows = {}
window1_least = time(hour=0, minute=0)
window1_most = time(hour=3, minute=0)
window2_least = time(hour=3, minute=0)
window2_most = time(hour=6, minute=30)
window3_least = time(hour=6, minute=30)
window3_most = time(hour=11, minute=50)
window4_least = time(hour=11, minute=50)
window4_most = time(hour=14, minute=55)
window5_least = time(hour=14, minute=55)
window5_most = time(hour=16, minute=55)
window6_least = time(hour=16, minute=55)
window6_most = time(hour=20, minute=0)
window7_least = time(hour=20, minute=0)
window7_most = time(hour=0, minute=0)
def which_window(minutes):
hour = minutes // 60
minute = minutes % 60
curent_time = time(hour=hour, minute=minute)
if window1_least <= curent_time < window1_most:
return 1
elif window2_least <= curent_time < window2_most:
return 2
elif window3_least <= curent_time < window3_most:
return 3
elif window4_least <= curent_time < window4_most:
return 4
elif window5_least <= curent_time < window5_most:
return 5
elif window6_least <= curent_time < window6_most:
return 6
elif window7_least <= curent_time < window7_most:
return 7
windows = {minute: which_window(minute) for minute in range(1440)}
def get_current_window():
current_minute = datetime.now().hour * 60 + datetime.now().minute
return windows[current_minute]
# Just for testing
print get_current_window()
从日期时间导入日期时间,时间
windows={}
窗口1\u至少=时间(小时=0,分钟=0)
窗口1\u most=时间(小时=3,分钟=0)
窗口2\u至少=时间(小时=3,分钟=0)
窗口2\u most=时间(小时=6,分钟=30)
窗口3\u至少=时间(小时=6,分钟=30)
窗口3\u most=时间(小时=11,分钟=50)
窗口4_至少=时间(小时=11,分钟=50)
窗口4\u most=时间(小时=14,分钟=55)
窗口5_至少=时间(小时=14,分钟=55)
窗口5\u most=时间(小时=16,分钟=55)
窗口6_至少=时间(小时=16,分钟=55)
窗口6\u most=时间(小时=20,分钟=0)
窗口7_至少=时间(小时=20,分钟=0)
窗口7\u most=时间(小时=0,分钟=0)
def哪个_窗口(分钟):
小时=分钟//60
分钟=分钟%60
当前时间=时间(小时=小时,分钟=分钟)
如果window1\u至少“这将缓存此函数的结果”以及。。。是的,缓存就是这样做的。如果不想缓存结果,您想如何缓存函数?@syntonym:我想单独缓存时间窗口定义。它们是静态的,不会改变。然后您可以将它们移出模块中的函数(或者,如果您愿意,也可以将它们移出不同的模块或类)。函数会做一些事情,因为您有一些静态数据。你应该把它放在静态的地方,而不是创建一个函数并缓存它。我明白了,你的意思是将它们定义为全局变量。因此,当我在类或函数中使用这些全局定义时,我是否应该首先声明global window1\u least
、global\u window1\u most
等等?您不需要重新声明它们,只需使用它们。如果您想写入它们,只需要使用global
关键字(因为否则写入的值将位于当前范围而不是全局范围)。因为您只读取它们,所以不需要全局。