扩展 sizeof
扩展 sizeof¶
当 Dask 需要计算对象以字节为单位的大小时(例如,用于确定将哪些对象溢出到磁盘),它会使用 dask.sizeof.sizeof
注册机制。需要为其自有对象定义 sizeof
实现的用户可以使用 sizeof.register
>>> import numpy as np
>>> from dask.sizeof import sizeof
>>> @sizeof.register(np.ndarray)
>>> def sizeof_numpy_like(array):
... return array.nbytes
可以通过将此代码放入库的模块之一(例如 __init__.py
)中来执行,以便向 Dask 注册实现。然而,这给这些库的开发者带来了维护负担,并且在这些库不接受补丁的情况下,必须在所有 worker 上手动导入。
因此,Dask 还提供了一个 entrypoint,位于 dask.sizeof
组下,以使第三方库能够开发和维护这些 sizeof
实现。
对于一个虚构的库 numpy_sizeof_dask.py
,所需的 setup.cfg
配置如下
[options.entry_points]
dask.sizeof =
numpy = numpy_sizeof_dask:sizeof_plugin
而 numpy_sizeof_dask.py
将包含
>>> import numpy as np
>>> def sizeof_plugin(sizeof):
... @sizeof.register(np.ndarray)
... def sizeof_numpy_like(array):
... return array.nbytes
首次导入 dask.sizeof 时,Dask 会使用 dask.sizeof.sizeof
对象调用 entrypoint (sizeof_plugin
),然后可以使用该对象注册 sizeof 实现。