R блестящий сеанс с несколькими подключенными пользователями - PullRequest
2 голосов
/ 10 марта 2020

Минимальный воспроизводимый пример:

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. Откройте другую вкладку браузера с другим сеансом для запущенного приложения.
  3. Запустите Запустите 1 на первой вкладке. Go ко второй вкладке браузера и запустите Выполнить 2 .

Проблема: вторая кнопка обозревателя не запускается независимо. Он ожидает окончания первого запуска в первом сеансе. Я думал, что блестящие сессии независимы. Как Блестящий обрабатывает многократные блестящие сессии за одну сессию Что, если несколько пользователей хотят подключиться к приложению одновременно?

Как обрабатывать несколько пользователей, работающих с одним приложением одновременно? Спасибо

1 Ответ

1 голос
/ 11 марта 2020

Ограничить количество соединений на рабочий процесс, т. Е. Дать каждому пользователю свой собственный рабочий процесс R. Вы можете сделать это, установив число одновременных подключений, разрешенных для одного рабочего процесса, равным 1.

Если вы развертываете свое приложение через shinyapps.io, инструкции и дальнейшие сведения приведены здесь: https://shiny.rstudio.com/articles/scaling-and-tuning.html

Если вы развертываете на своем собственном блестящем сервере инструкции и дополнительную информацию здесь: https://support.rstudio.com/hc/en-us/articles/220546267-Scaling-and-Performance-Tuning-Applications-in-Shiny-Server-Pro

Я взял ваше приложение, добавил видимый индикатор выполнения, и развернул его с указанными выше настройками: https://minhealthnz.shinyapps.io/example_parallel/

library("shiny")

ui <- fluidPage(
  actionButton("button1", "Run 1"),
  actionButton("button2", "Run 2")
)

server <- function(session, input, output) {

  observeEvent(input$button1, {

    withProgress(message = 'Run 1', detail = '', value = 0, {
        for (i in 1:15) {
            incProgress(1/15)
            Sys.sleep(0.25)
        }
    })

  })

  observeEvent(input$button2, {

    withProgress(message = 'Run 2', detail = '', value = 0, {
        for (i in 1:15) {
            incProgress(1/15)
            Sys.sleep(0.25)
        }
    })

  })
}

shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...