Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中缓存包含某些常量的函数_Python_Django_Performance_Caching - Fatal编程技术网

Python 在Django中缓存包含某些常量的函数

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_

在我维护的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_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
关键字(因为否则写入的值将位于当前范围而不是全局范围)。因为您只读取它们,所以不需要全局。