Что такое "черная магия" Фуррра?

Я использую пакет R furrrдля большинства моих потребностей в распараллеливании и практически никогда не возникало проблем с экспортом вещей из моей глобальной среды в кластер. Сегодня я это сделал и не знаю почему. Документация пакета, кажется, описывает процесс, посредством которого глобальные переменные отправляются в кластеры, как "черную магию". Что такое черная магия?

В furrr::future_options в документации говорится:

Глобальные переменные и пакеты По умолчанию будущий пакет будет выполнять черную магию для поиска глобальных переменных и пакетов, которые требуются вашему вызову furrr, и будет экспортировать их каждому исполнителю. Однако он не всегда идеален и может быть уточнен с помощью аргументов глобальных переменных и пакетов.

В качестве второстепенного вопроса: есть ли элегантный способ сказать ему, что он занимается черной магией, но также экспортировать то, что он пропустил? Или есть варианты: а) вся черная магия или б) жестко закодировать все в.options аргумент?

1 ответ

Решение

Это не полностью отвечает на вопрос, но я думаю, что это указывает вам правильное направление. Из раздела «Глобалы» этой вступительной виньетки :

Это делается с помощью пакета globals , который использует проверку статического кода для определения глобальных переменных. Если глобальная переменная идентифицирована, она фиксируется и становится доступной для процесса оценки.

Также есть виньетка «Общие проблемы с решениями» (которую @michael любезно связала выше), в которой обсуждаются некоторые общие проблемы, возникающие в результате статического кода eval в пакете globals.

Я нашел свой путь сюда, потому что мой код не мог найти переменные, на которые я ссылался внутри вызов. Эта виньетка объясняет, почему это происходит.

Трудно сказать, почему ваш код иногда работал, а иногда нет. Но, как видите, под капотом творится достаточно сложностей, и я не удивлюсь, если какое-то, казалось бы, несвязанное изменение что-то сломало. (Для меня это изменение заключалось в очистке моего кода и использовании вместо :shrug:)

Другие вопросы по тегам