Будущее ждет исполнения на одноядерной машине
У меня есть 2 машины с идентичными версиями Ubuntu (16.04), R (3.4.4) и будущего пакета (1.10.0). Я запускаю код ниже, который реализует асинхронное программирование
tic()
library(future)
plan(multisession)
mehAsync = function(){
future::future({
Sys.sleep(5)
return('meh')
})
}
out = mehAsync()
what = then(out,function(value){(value)})
toc()
Ожидаемое поведение состоит в том, что выполнение завершится почти мгновенно, оставляя то, что должно быть ожидающим обещанием. В одной машине это происходит, выполнение происходит мгновенно. Однако на другом компьютере, который у меня есть, выполнение ожидает выполнения функции mehAsync, завершается через 5 секунд.
Как говорилось ранее, обе машины практически идентичны. Основное различие между ними заключается в том, что медленнее одноядерный компьютер. Однако, исходя из моего понимания, multisession
План не должен требовать нескольких ядер. Достаточно ресурсов, чтобы открыть новый сеанс R, который есть у машины.
Конкретные вопросы здесь:
- Я неправильно понимаю ожидаемое поведение, и это нормально для одноядерной машины?
- Какие другие факторы, которые я не принимаю во внимание, могут влиять на это поведение?
- Как я могу отладить эту проблему, так как нет никаких сообщений об ошибках / предупреждений и не может быть воспроизведен мной и другими людьми на независимых машинах?
Примечание: этот вопрос возник при попытке исследовать этот другой вопрос
1 ответ
Параметры по умолчанию для multisession
план устанавливает workers
параметры для availableCores()
в одноядерной машине. Это означает, что если не использовать параметры при использовании plan
Количество ядер имеет значение.
дела
plan(multisession,workers=2)
решает эту проблему