Точное исключение было таким:
File "/Users/may/anaconda/envs/eagle-i/lib/python3.6/site-packages/cloudpickle/cloudpickle.py", line 841, in save_file
raise pickle.PicklingError("Cannot pickle files that are not opened for reading: %s" % obj.mode)
_pickle.PicklingError: Cannot pickle files that are not opened for reading: a
Проходя через отладчик, мне было любопытно, что было obj
, а именно:
<_io.TextIOWrapper name='/tmp/logs/ei_sched.log' mode='a' encoding='UTF-8'>
В приведенном выше фрагменте кода я пропустил звонки нашему регистратору, и именно по этому поводу cloudpickle
жаловался.Ведение журнала было оставшимся артефактом этой функциональности до попытки использовать dask для распараллеливания этой функциональности.После того, как я удалил вызовы журналирования из функции, переданной в Client.map()
, все заработало как положено.
Кроме того, это был хороший улов из cloudpickle
, поскольку запись в один файл не должна выполняться изработники даска.