Say I setup memoization z Joblib następująco (przy użyciu rozwiązanie przewidziane here):Selektywne Re-memoization z DataFrames
from tempfile import mkdtemp
cachedir = mkdtemp()
from joblib import Memory
memory = Memory(cachedir=cachedir, verbose=0)
@memory.cache
def run_my_query(my_query)
...
return df
I say I zdefiniować kilka zapytań, query_1
i query_2
, oboje potrwać długi czas działania.
Rozumiem, że wraz z kodem, jak to jest:
sekund wezwanie albo zapytania, użyłby memoized wyjście, a mianowicie:
run_my_query(query_1) run_my_query(query_1) # <- Uses cached output run_my_query(query_2) run_my_query(query_2) # <- Uses cached output
mogę użyć
memory.clear()
, aby usunąć cały katalog pamięci podręcznej
Ale co jeśli chcę ponownie wykonać zapamiętywanie dla tylko jednego z zapytań (np. query_2
) bez wymuszania usunięcia w drugim zapytaniu?
wydaje się, że [ '.call'] (https://pythonhosted.org/joblib/memory.html#joblib.memory.MemorizedFunc.call) _forces_ obliczeń. możesz sprawdzić, czy to również aktualizuje pamięć podręczną. –
@ behzad.nouri świetny wskaźnik! Miałem nadzieję na taką metodę. Szukałem słowa kluczowego 'force', ale niczego nie znalazłem. '.call' może być odpowiedzią. Sprawdzę to. –
@ behzad.nouri Patrząc na [kod] (https://github.com/joblib/joblib/blob/master/joblib/memory.py#L665-L682), wydaje się, że nazywa się "persist_output", więc myślę, że to da rade! –