R Shiny - Непрерывная фоновая задача

Я хотел бы знать, возможно ли сохранить непрерывную фоновую задачу при запуске приложения Shiny. Это означает, например, что « поток » может загружать данные с веб-страницы в базу данных, пока работает приложениеручное приложение.

Более того, возможно ли взаимодействие с данными из внешнего фона " thread "? (например, пока идет загрузка, создайте сюжет или что-то в этом роде).

В видеоуроке говорится, что: «Код за пределами функции сервера будет выполняться один раз за сеанс R (рабочий)». Поэтому код, который мне нужен, я думаю, должен быть размещен вне серверной функции.

Возможно ли достичь сцены, которую я описываю? Или мне нужен еще один внешний экземпляр R (за пределами сценариковinyApp)?

Заранее спасибо.

7 голосов | спросил aloplop85 22 J000000Wednesday15 2015, 00:57:12

2 ответа


0

Я думал об этом и думаю, что это возможно, но реализация, которую я имею в виду, зависит от платформы. В этом случае я возьму Ubuntu 14.04.

Допустим, у вас есть вычислительная задача:

ui.R:

library(shiny)
fluidPage(
  numericInput('number','Number',10000000),
  textOutput('CalcOutput')
)

server.R

library(shiny)
function(input,output,session) {
   output$CalcOutput <- renderText({
    sort(runif(input$number))
   })
}

перенести операцию в функцию соответствующих переменных в подфайле:

newfile.R

saveRDS(sort(runif(commandArgs(TRUE)[1])), file = 'LargeComputationOutput')

измени свой сервер. R

function(input, output) {
  observe({
    # Starts script as a background process, but completes instantaneously
    system(paste('Rscript newfile.R',input$number,'&')) 
  })

  CalculationOutput <- reactive({
    invalidateLater(5000)
    validate(
      need(file.exists('LargeComputationOutput'),'Calculation In Progress'),
      need(file.info('LargeComputationOutput')$mtime > Sys.time()-5,'Calculation In Progress')
    )
    x <- readRDS('LargeComputationOutput')
  })

  output$CalcOutput <- renderText({
    CalculationOutput()[300]
  })


}

Это все еще немного глючит, но это доказательство концепции, что вы можете перемещать интенсивные операции в подпроцессы и иметь реактивный слушатель, определяющий, когда эти вычисления выполнены.

РЕДАКТИРОВАТЬ: Shiny также потребуются разрешения для записи в соответствующее местоположение.

ответил Shape 29 Jpm1000000pmFri, 29 Jan 2016 22:10:46 +030016 2016, 22:10:46
0

Я нашел решение этой проблемы с помощью будущего пакета. Пожалуйста, смотрите мой ответ в Вызов блестящего обратного вызова JavaScript из будущего

ответил André le Blond 17 MarpmFri, 17 Mar 2017 21:17:47 +03002017-03-17T21:17:47+03:0009 2017, 21:17:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132