2
考慮以下用途:在延遲鍵隱藏一些參數從哈希(to_task_dask)
In [49]: class MyClass(dict):
...: def __init__(self,a):
...: self.a = a
...: def get(self):
...: return a
...:
In [50]: a = MyClass(10)
In [51]: @delayed(pure=True)
...: def myFunc(a):
...: return a
...:
In [52]: myFunc(a)
Out[52]: Delayed('myFunc-96ed02ea2192c363a45cec74ef5eaefb')
In [53]: myFunc(a)
Out[53]: Delayed('myFunc-96ed02ea2192c363a45cec74ef5eaefb')
In [54]: a = MyClass(10)
In [55]: myFunc(a)
Out[55]: Delayed('myFunc-96ed02ea2192c363a45cec74ef5eaefb')
In [56]: a.a = 1000
In [57]: myFunc(a)
Out[57]: Delayed('myFunc-96ed02ea2192c363a45cec74ef5eaefb')
In [58]: a['foo'] = 'bar'
In [59]: myFunc(a)
Out[59]: Delayed('myFunc-bf4162396d43f090e476de70d30de251')
我在這裏的目的是要告訴DASK哪些參數計算功能純度緩存目的時使用。例如,如果對象具有一些具有一些數據檢索方法的子例程,並且這些方法又取決於內部參數(例如繪圖參數),則這很有用。如果我通過dask傳遞這個數據對象,我顯然不希望延遲實例的鍵在改變這些參數時發生改變。但是,我確實希望保存數據本身(基本上,這裏是self[key] = val
,這就是發生的情況)。
這似乎這樣的伎倆。
我想問一下,將這種行爲的支持?或者,還有更好的方法?或者這與dask的願景不兼容?謝謝!
哦,是的,這是完美的謝謝! 我找了記號化文檔中你的建議之後,似乎這裏有相關的東西: http://dask.pydata.org/en/latest/examples/array-extend.html?highlight=tokenize – julienl
dask.base。 tokenize是內部API,因此沒有很好的記錄。你給它東西,它產生一個令牌'記號化(「你好」,np.array(5)中,x = 10 1) - >「sf7g7gf98g7g8s7g'' – MRocklin
是否有任何辦法有一個延遲的類的成員函數是確定性的? 我無法弄清楚這一點,並希望避免每次調用成員函數時都必須添加'dask_key_name'參數並計算一個標記。 基本上,定義一個延遲類,比如'myclass',任何調用都被認爲是純的,'myclass.func()'是很好的。用純延遲對象來裝飾函數是不夠的。這是否存在,我錯過了? 這會讓我的生活更加容易,謝謝! – julienl