2017-10-11 22 views
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の誤解の可能性があります。

ありがとうございます!

答えて

1

私は自分の質問に答えました。私はキャッシュを正しく登録していませんでした。 cache.register()

誰かがこれについてのコメントがありましたら、私は喜んで聞いています。ありがとう。