rmarkdown :: render () не позволяет нескольким пользователям одновременно? - PullRequest
0 голосов
/ 30 марта 2019

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

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

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

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

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

1 Ответ

1 голос
/ 01 апреля 2019

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

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

...