我通过以下测试获得了意外行为。很可能我可能误解了一些东西,但目前我已经没有想法并会欣赏输入。考虑以下测试:
# 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]
第一个assert语句通过,但第二个没有通过。我认为dask缓存了结果,因此使用相同的dask密钥的计算只计算一次。这段代码中是否缺少某些内容?
请注意,这已在dask.distributed
中使用,因此这可能是API中的一个误解。
谢谢!
答案 0 :(得分:1)
我回答了自己的问题。我没有正确注册缓存。我不得不添加一行: cache.register()
如果有人对此有其他评论,我很高兴听到。感谢。