Проблема возникает из-за строки pipeline_options.view_as(SetupOptions).save_main_session = True
.
Когда конвейер запускается, луч будет использовать dill.dump_session
для сериализации основного сеанса и сохранения его в файл.Затем он будет использовать dill.load_session
для загрузки этого же файла и десериализации его для воссоздания основного сеанса.Он снова выполнит повторную сериализацию основного сеанса, используя dill.dump_session
для отправки бегуну.Причиной сериализации, десериализации и последующей повторной сериализации основного сеанса является исправление несоответствия в сериализации, как указано в https://github.com/uqfoundation/dill/issues/195. Это означает, что у всех участников будет эта проблема.
Основной сеансв этом случае содержит объект myFile3984573498534
.Когда это десериализовано, он снова откроет файл так же, как вы открыли его изначально, используя режим w+
.Это немедленно перезапишет файл.Затем этот файл закрывается, и конвейер заканчивается пустым файлом.
Лучшее решение для этого - открыть файл в режиме r+
, чтобы файл открывался в режиме чтения во время десериализации основного файла.сеанс, в результате чего он не изменяется.
Если вам нужно , чтобы открыть файл в режиме w+
, вы должны удалить переменную, хранящую файл после закрытия файла, то есть del(myFile3984573498534)
после myFile3984573498534.close()
, но до запуска конвейера.Это предотвращает сериализацию переменной, поскольку она больше не существует, в результате чего файл не изменяется.