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