будущее ждет исполнения на одноядерной машине - PullRequest
0 голосов
/ 18 октября 2018

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

0 голосов
/ 18 октября 2018

Параметры по умолчанию для плана multisession устанавливают для параметров workers значение availableCores() в одноядерном компьютере.Это означает, что если не переопределять параметры при использовании plan, количество ядер имеет значение.

Выполнение

plan(multisession,workers=2)

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

...