从dask-workers调用已编译的代码并进行序列化

时间:2019-04-29 15:58:39

标签: dask-distributed

我试图了解调用编译代码(Fortran / C),序列化和分布式工作程序的问题。更具体地说,我有这样的代码:

  def calc_z(ph, phb):
      geopt = ph + phb
      geopt_unstag = destagger(geopt, -3)   # PYTHON WRAPT FORTRAN CODE
      return geopt_unstag/Constants.G

其中destagger最终是对某些fortran代码的调用。

我这样安排:

  client = Client('127.0.0.1:8786')
  ...
  z = client.submit(calc_z, ph, phb)

并获得:

distributed.protocol.pickle-信息-无法序列化。例外:对象代理必须定义 reduce_ex () 追溯(最近一次通话):   文件“ /home/brownrig/miniconda3/envs/dask/lib/python3.7/site-packages/distributed/worker.py”,第2765行,在dumps_function中     结果=缓存[功能] KeyError:

在处理上述异常期间,发生了另一个异常:

回溯(最近通话最近):   在转储中的文件“ /home/brownrig/miniconda3/envs/dask/lib/python3.7/site-packages/distributed/protocol/pickle.py”,第41行

紧随其后的是几乎完全是pickle.py和cloudpickle.py发出的巨大痕迹

当我使用原始的本地调度程序时,一切正常:

z = dask.array.map_blocks(calc_z, ph, phb, dtype=float32)
dask.compute(z)

谁能解释这些问题是什么?

谢谢 里克

0 个答案:

没有答案