1
次のテストで予期しない動作が発生しています。私は何か誤解している可能性がありますが、現在私はアイデアがなく、入力を感謝します。次のテストを検討してください。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]
最初のassert文は成功しますが、2番目の文は失敗します。私は、同じdaskキーを持つ計算が1回だけ計算されるように、daskが結果をキャッシュしたと考えました。このコードには何かがありますか? これはdask.distributed
で動作していますので、これはAPIの誤解の可能性があります。
ありがとうございます!