我想知道dask(尤其是dask数组)是否可能知道是否以及何时计算了某些内容。我在考虑要知道dask计算数组多少次的单元测试。类似于模拟对象知道多少次被调用。这样的东西已经存在了吗?如果不是,是否有比制作custom callback更好的方法?如果不存在,那么敏捷的核心开发人员是否有兴趣将其添加到核心dask进行测试?
非常感谢您的帮助。
说我有一个函数,它接收一个xarray DataArray,对其进行一些处理,然后返回它。在某些情况下,dask数组被隐式转换为numpy数组,包括新的dask用户,他们不知道最好的dask友好方法。我想编写单元测试,以确保我或其他贡献者不会意外损害函数的性能。考虑到测试数据通常是现实情况的简化/小版本,并且在这些情况下可能看不到多次计算快阵列的性能,因此这一点尤其重要。
这就是我最终根据MRocklin的回答作为简单的解决方案所做的事情。
class CustomScheduler(object):
def __init__(self, max_computes=1):
self.max_computes = max_computes
self.total_computes = 0
def __call__(self, dsk, keys, **kwargs):
self.total_computes += 1
if self.total_computes > self.max_computes:
raise RuntimeError("Too many dask computations were scheduled: {}".format(self.total_computes))
return dask.get(dsk, keys, **kwargs)
然后我像这样使用它:
with dask.config.set(scheduler=CustomScheduler(0)):
# dask array stuff
答案 0 :(得分:1)
有多种触发执行的方法。
一种方法是指定自定义调度程序:
.menu_ul > li{
position:relative;
}
.menu_ul > li> ul{
position: absolute;
text-align: center;
padding: 5px 10px;
white-space: nowrap;
border:1px solid black;
}
Custom callbacks,就像您建议的一样,也很容易实现。
如果您仅使用dask数组,则可以查看array plugins
测试套件中使用了多种其他方法。