gpt4 book ai didi

dask - Dask 如何处理函数定义中的外部或全局变量?

转载 作者:行者123 更新时间:2023-12-05 05:10:17 29 4
gpt4 key购买 nike

如果我有一个依赖于某些全局或其他常量的函数,如下所示:

x = 123

def f(partition):
return partition + x # note that x is defined outside this function

df = df.map_partitions(f)

这个有用吗?或者我是否需要以某种方式显式包含外部变量 x

最佳答案

单进程

如果您在一台机器上并且不使用 dask.distributed,那么这无关紧要。变量 x 存在,不需要移动

分布式或多进程

如果我们必须在进程之间移动函数,那么我们需要将该函数序列化为字节串。 Dask 使用库 cloudpickle做这个。

cloudpickle 库将 Python 函数 f 转换为 bytes 对象,这种方式可以在大多数设置中捕获外部变量。因此,查看您的函数是否适用于 Dask 的一种方法是尝试对其进行序列化,然后在其他机器上对其进行反序列化。

import cloudpickle
b = cloudpickle.dumps(f)

cloudpickle.loads(b) # you may want to try this on your other machine as well

如何 cloudpickle 实现这一点可能相当复杂。您可能需要查看他们的文档。

关于dask - Dask 如何处理函数定义中的外部或全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56758611/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com