Будущее ждет исполнения на одноядерной машине

У меня есть 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)

решает эту проблему

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