In einer Django-Website pflegen (v 1.7), teile ich jeden 24-Stunden-Tag in verschiedene Zeitfenster, und dann je nachdem, in welchem Zeitfenster ein Benutzer angemeldet ist, ich verarbeite etwas für den besagten Benutzer. Es spielt keine Rolle, welches Datum es ist, nur das Zeitfenster ist wichtig.Zwischenspeichern einer Funktion mit einigen Konstanten, in Django
Derzeit ist die Zeitfenster und die damit verbundene Verarbeitung sind in meinem views.py wie dies in einer Funktion gemacht:
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
Hinweis: time_now
in der Funktion im Wesentlichen datetime.now().time()
ist.
Die obige Funktion wird sehr häufig für jeden Benutzer aufgerufen. Ich fühle, wenn ich cache
meine Zeitfenster Definitionen, es wird eine Leistungssteigerung sein.
Was soll ich tun? Soll ich einfach den @cache_page(60 * 60 * 24)
Dekorateur über diese Funktion hinzufügen? Ich denke, wenn ich das tue, wird auch das Ergebnis dieser Funktion zwischengespeichert, während ich nur die Zeitfensterdefinitionen zwischenspeichern möchte. Also was soll ich tun?
Bitte geben Sie den besten Weg, dies zu erreichen, zusammen mit einem anschaulichen Beispiel. Ich bin ein Neuling und umschlinge immer noch die meisten dieser Konzepte.
„das wird cachen das Ergebnis dieser Funktion auch“ gut ... ja sein, dass ist was ein Cache tut. Wie möchten Sie die Funktion zwischenspeichern, wenn Sie das Ergebnis nicht zwischenspeichern möchten? – syntonym
@ syntonym: Ich möchte nur die Zeitfensterdefinitionen zwischenspeichern. Sie sind statisch und ändern sich nicht. –
Dann können Sie sie aus der Funktion im Modul (oder einem anderen Modul oder einer Klasse, wenn Sie bevorzugen) verschieben. – syntonym