rmarkdown::render() не разрешает нескольким пользователям одновременно?

#r #shiny #r-markdown #shiny-server

#r #блестящий #r-markdown #блестящий сервер

Вопрос:

У меня есть отличное приложение, которое отображает HTML-отчет с помощью кнопки действия. Как только это будет отображено, на экране появится кнопка загрузки, так что результат этой кнопки действия может быть загружен. Мне пришлось создать эти две отдельные кнопки, потому что обработчик загрузки, похоже, имеет тайм-аут, поэтому, поскольку мой Rmd-файл отрисовывается немного дольше, он не будет работать и выдает ошибку на сервере.

В настоящее время я рендерю свой Rmd следующим образом:

 rmarkdown::render(tempReport, output_file = tmp_file,
                              params = params,
                              envir = new.env(parent = globalenv()))
  

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

У кого-нибудь есть какие-либо решения для этого?

Ответ №1:

Поведение, которое вы наблюдаете, является результатом того факта, что R является однопоточным. Прямой ответ на ваш вопрос заключается в том, что вам нужно реализовать асинхронные методы, чтобы позволить нескольким render() процессам выполняться одновременно. Подробнее об этом:https://rstudio.github.io/promises /.

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