Минимальный воспроизводимый пример:
library("shiny")
ui <- fluidPage(
actionButton("button1", "Run 1"),
actionButton("button2", "Run 2")
)
server <- function(session, input, output) {
cat("session starts\n")
observeEvent(input$button1, {
cat("1 starts\n")
Sys.sleep(15)
cat("1 stops\n")
})
observeEvent(input$button2, {
cat("2 starts\n")
Sys.sleep(15)
cat("2 stops\n")
})
}
shinyApp(ui = ui, server = server)
Каждая кнопка имитирует выполнение некоторого длительного алгоритма с интенсивным использованием ЦП.
- Запустите приложение и откройте сеанс на одной вкладке браузера.
- Откройте другую вкладку браузера с другим сеансом для работающего приложения.
- Запустите Выполнить 1 на первой вкладке. Перейдите на вторую вкладку браузера и запустите Выполнить 2.
Проблема: вторая кнопка-обозреватель не запускается самостоятельно. Он ожидает завершения первого запуска в первом сеансе. Я думал, что блестящие сеансы независимы. Как shiny обрабатывает несколько сеансов Shiny за один сеанс R? Что делать, если к приложению одновременно хотят подключиться несколько пользователей?
Как справиться с тем, что несколько пользователей одновременно запускают одно и то же приложение? Спасибо
promises
иfutures
, позволяющие пользователям выполнятьasync
операции rstudio.github.io /promises/articles/shiny.html - person Pork Chop   schedule 10.03.2020shiny
, является однопоточным, однако он может легко поддерживать 50 тысяч одновременных пользователей в любой момент времени. Что касается использования обещаний на сервере, краткий ответ, вероятно, отрицательный. Если вы хотите обернуть приложение в отдельное приложение, загляните в докер shinyproxy.io - person Pork Chop   schedule 10.03.2020