Ich habe eine Python-Klassenmethode Test.test(x), die teure Daten erzeugt, d. h. ich möchte functools.lru_cache als Wrapper verwenden. Die Ausgabe hängt jedoch von einem Klassenattribut Test.a ab, das eine kleine Anzahl unterschiedlicher Werte annehmen kann. Ich möchte für jede Kombination (a,x) des Attributs a und des Parameters x eine zwischengespeicherte Version behalten. D.h. Ich möchte, dass der Cache wie gewohnt funktioniert, solange das Attribut a unverändert bleibt, aber die Methode sollte neu ausgewertet werden, sobald sich das Klassenattribut ändert. Wie gelingt das am besten?
Hier das Codebeispiel:
from functools import lru_cache
class Test():
a = 1
def __new__(cls, a = 1):
cls.a = a
return super().__new__(cls)
@classmethod
@lru_cache(maxsize=32)
def test(cls, x):
return x * cls.a
print(Test.test(1),Test(2).test(1),Test.test(1))
Gewünschte Ausgabe (mit deaktiviertem lru_cache): 1 2 2
Ausgabe mit lru_cache: 1 1 1
Einige Klarstellungen:
Das Attribut a wird nur selten geändert, daher spielt es keine Rolle, ob es vorhanden ist ist eine zwischengespeicherte Kopie für jede Kombination (a,x) oder ob der Cache zurückgesetzt wird, wenn sich der Wert von a ändert.
Die Testmethode muss kann auf diese Weise als Klassenmethode implementiert werden (da es von einer abstrakten Klasse erbt, die ich nicht ändern kann).
Andere Möglichkeiten, die zu übergeben Wert von a zur Methode sind zumindest unerwünscht. Test(a).test(x) wäre die korrekte Art und Weise, wie ähnliche Funktionen des Projekts aufgerufen werden.
Ich habe eine Python-Klassenmethode Test.test(x), die teure Daten erzeugt, d. h. ich möchte functools.lru_cache als Wrapper verwenden. Die Ausgabe hängt jedoch von einem Klassenattribut Test.a ab, das eine kleine Anzahl unterschiedlicher Werte annehmen kann. Ich möchte für jede Kombination (a,x) des Attributs a und des Parameters x eine zwischengespeicherte Version behalten. D.h. Ich möchte, dass der Cache wie gewohnt funktioniert, solange das Attribut a unverändert bleibt, aber die Methode sollte neu ausgewertet werden, sobald sich das Klassenattribut ändert. Wie gelingt das am besten? Hier das Codebeispiel: [code]from functools import lru_cache
class Test(): a = 1
def __new__(cls, a = 1): cls.a = a return super().__new__(cls)
@classmethod @lru_cache(maxsize=32) def test(cls, x): return x * cls.a
print(Test.test(1),Test(2).test(1),Test.test(1)) [/code] Gewünschte Ausgabe (mit deaktiviertem lru_cache): 1 2 2 Ausgabe mit lru_cache: 1 1 1 Einige Klarstellungen: [list] [*]Das Attribut a wird nur selten geändert, daher spielt es keine Rolle, ob es vorhanden ist ist eine zwischengespeicherte Kopie für jede Kombination (a,x) oder ob der Cache zurückgesetzt wird, wenn sich der Wert von a ändert.
[*]Die Testmethode muss kann auf diese Weise als Klassenmethode implementiert werden (da es von einer abstrakten Klasse erbt, die ich nicht ändern kann).
[*]Andere Möglichkeiten, die zu übergeben Wert von a zur Methode sind zumindest unerwünscht. Test(a).test(x) wäre die korrekte Art und Weise, wie ähnliche Funktionen des Projekts aufgerufen werden.
Ich versuche, ein Container-Image mit AWS EC2 Ubuntu zu erstellen, um ein Python-Skript, das die web3.py-Bibliothek benötigt, auf das AWS ECR-Repository zu übertragen. Allerdings wird mir ein Fehler...
Aufgrund einiger Entwicklungsbeschränkungen bei der Verwendung von .NET 8 muss ich einen wiederverwendbaren Dienst verwalten. Diese müssen entweder vorübergehend oder Singleton sein, aber 1 von 3...
Ich verwende Spring Boot 3.x mit Redis und Redisson als Second-Level-Cache. Während die Anwendung ausgeführt wird, funktioniert alles wie erwartet. Wenn die Anwendung jedoch gestoppt wird, bleiben...
Ich muss eine vorhandene Datenbank mithilfe von Entity Framework 6 abbilden, um (nur) Daten zu lesen. />I have simplified my real situation to the simplest in the following model:
Ich habe ein Setup, bei dem ich zwei Server habe, von denen jeder seinen eigenen lokalen Cache für eine Karte verwaltet. Bei der Initialisierung wird die Karte zwischengespeichert und jedes Mal, wenn...