快速回答
将您的mod.py文件上传到所有工作人员。您可以使用用于设置dask.distributed的任何机制来执行此操作,也可以使用upload_file方法
e.upload_file('mod.py')另外,如果您的函数是在IPython中创建的,而不是作为模块的一部分,则它将毫无问题地发送出去。
长答案
所有这些都与如何在Python中序列化函数有关。模块中的功能按其模块名称和功能名称进行序列化
In [1]: from math import sinIn [2]: import pickleIn [3]: pickle.dumps(sin)Out[3]: b'x80x03cmathnsinnqx00.'
因此,如果客户端计算机想要引用该
math.sin函数,它将沿着该字节字符串(您会注意到
'math'并
'sin'在其中将其埋入其他字节中)发送给工作机。工作人员看了看这个字节串,然后说:“好吧,我想要的功能在这样的模块中,让我继续在本地文件系统中查找它。如果该模块不存在,则会引发错误。
,就像您上面收到的一样。
对于动态创建的函数(在IPython中创建的函数),它使用完全不同的方法,将所有代码捆绑在一起。这种方法通常效果很好。
一般来说,Dask假定工作人员和客户端都具有相同的软件环境。通常,这主要由使用Docker等其他工具来设置您的集群的人来处理。
upload_file当您拥有文件或脚本的更新频率更高时,可以使用诸如此类的方法来填补空白。



