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!