确定dask计算多少次

时间:2018-11-13 20:49:38

标签: python dask

问题

我想知道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

1 个答案:

答案 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

测试套件中使用了多种其他方法。