Ответ 1
Джон, я не уверен, поможет ли это, но из исследования setTimeLimit
я узнал, что он может остановить выполнение, когда пользователь может выполнить прерывание, например, Ctrl-C. См. этот вопрос для некоторых ссылок.
В частности, обратные вызовы могут быть способом, и я проверил addTaskCallback
и это руководство по developer.r-project.org.
Вот еще четыре предложения:
-
Хотя это взломать совсем другой подход, я должен вызывать два сеанса R, один - мастер-сеанс, а другой просто существует для выполнения команд оболочки, переданных мастер-сессией, которая только ждет подтверждения, что работа была выполнена до начала следующего.
-
Если вы можете использовать
foreach
вместоfor
(либо параллельно, через% dopar%, либо serial% do%, а не% dopar% или w/только 1 зарегистрированный рабочий), это может быть более восприимчивым к прерываниям, так как это может быть эквивалентно первому предложению (поскольку оно вилки R). -
Если вы можете получить код выхода для внешней команды, это может быть передано в условный цикл. Этот предыдущий Q & A будет полезен в этом отношении.
-
Если вы хотите, чтобы все было запущено в bash script, тогда R мог просто написать один длинный script (т.е. вывести строку или ряд строк в файл). Это может быть выполнено, и прерывание гарантировано не влияет на цикл, поскольку вы развернули цикл. Кроме того, вы можете писать циклы в bash. Вот примеры. Лично мне нравится применять команды к файлам с помощью
find
(например,find .... -exec doStuff {} ';'
) или как входы через backquotes. К сожалению, я не могу легко дать хорошо отформатированный код на SO, так как он вводит backquotes внутри backquotes... См. Эту страницу для примеров Таким образом, может случиться так, что у вас может быть одна команда, нет цикла и применить функцию ко всем файлам, удовлетворяющим определенному набору критериев. Использование подстановки команд через backquotes - очень удобный трюк для пользователя bash.