2017-10-11 17 views
1

Ich bekomme unerwartetes Verhalten mit dem folgenden Test. Es ist wahrscheinlich, dass ich etwas falsch verstanden habe, aber derzeit habe ich keine Ideen mehr und würde mich über Input freuen. Betrachten Sie den folgenden Test:unerwartetes Verhalten mit normalize_token

# test passing an object 
from dask import delayed, compute, get, set_options 
# for testing the caching 
from dask.base import normalize_token 
from dask.cache import Cache 

set_options(delayed_pure=True) 


def test_object_hash(): 
    cache_tmp = cache.Cache(1e9) 
    # test that object hashing is working 
    class Foo: 
     a = 1 
     b = 2 

    @normalize_token.register(Foo) 
    def tokenize_foo(self): 
     return normalize_token((self.a, self.b)) 

    global_list = list() 

    def add(foo): 
     print("here") 
     global_list.append(1) 
     return foo.a + foo.b 

    # first, verify the hashes are the same 
    myobj = Foo() 
    first = delayed(add)(myobj) 
    myobj2 = Foo() 
    second = delayed(add)(myobj2) 
    assert first.key == second.key 

    # don't test with streams since it should be the same result 
    # this better highlights the problem 
    compute(first, get=get) 
    compute(second, get=get) 
    assert global_list == [1] 

Die erste Anweisung assert geht, aber die zweite nicht. Ich dachte, dass dask das Ergebnis zwischengespeichert hat, so dass Berechnungen mit demselben dask-Schlüssel nur einmal berechnet werden. Fehlt etwas in diesem Code? Beachten Sie, dass dies in dask.distributed funktioniert, so dass dies wahrscheinlich ein Missverständnis in der API ist.

Danke!

Antwort

1

Ich beantwortete meine eigene Frage. Ich hatte den Cache nicht richtig registriert. Ich musste die Zeile hinzufügen: cache.register()

Wenn jemand zusätzliche Kommentare zu diesem Thema hat, bin ich glücklich zu hören. Vielen Dank.