Вызов скомпилированного кода из dask-worker и сериализация - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь понять проблемы с вызовом скомпилированного кода (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 - это вызов некоего кода на фортране.

Я планирую это так:

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

И получите:

distrib.protocol.pickle - INFO - Не удалось сериализоваться. Исключение: прокси объекта должен определять redu_ex () Traceback (последний вызов был последним): Файл "/home/brownrig/miniconda3/envs/dask/lib/python3.7/site-packages/distributed/worker.py", строка 2765, в функции dumps_function результат = кеш [func] KeyError:

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (последний вызов был последним): Файл "/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)

Может кто-нибудь объяснить, в чем проблемы?

Спасибо Rick

...