У меня блестящее приложение, которое занимает много времени при загрузке zip-файлов.Я пытаюсь использовать пакеты futures
и promises
для управления загрузками, чтобы другие пользователи могли получить доступ к приложению во время загрузки.
Приложение выглядит следующим образом:
library(shiny)
ui <- fluidPage(
downloadButton("Download", "Download")
)
server <- function(input, output){
output$Download <- downloadHandler(
filename = "Downloads.zip",
content = function(file){
withProgress(message = "Writing Files to Disk. Please wait...", {
temp <- setwd(tempdir())
on.exit(setwd(temp))
files <- c("mtcars.csv", "iris.csv")
write.csv(mtcars, "mtcars.csv")
write.csv(iris, "iris.csv")
zip(zipfile = file, files = files)
})
}
)
}
shinyApp(ui, server)
Я пытался обернуть write.csv
внутри функции future
и установить `, и хотя это не приводит к ошибке, приложение недоступно для других пользователей во время загрузки.
library(shiny)
library(promises)
library(future)
plan(multiprocess)
ui <- fluidPage(
downloadButton("Download", "Download")
)
server <- function(input, output){
output$Download <- downloadHandler(
filename = "Downloads.zip",
content = function(file){
withProgress(message = "Writing Files to Disk. Please wait...", {
temp <- setwd(tempdir())
on.exit(setwd(temp))
files <- c("mtcars.csv", "iris.csv")
future(write.csv(mtcars, "mtcars.csv"))
future(write.csv(iris, "iris.csv"))
zip(zipfile = file, files = files)
})
}
)
}
shinyApp(ui, server)
Я также пытался обернуть всю функцию downloadHandler
внутри функции future
, но получаю ошибку:
Ошибка в .subset2 (x, "impl") $ defineOutput (name, значение, метка):
Неожиданный вывод MulticoreFuture для DownloadUnexpected Выход MultiprocessFuture для DownloadUnexpected Future output для DownloadUnexpected выход среды для Download
Как я могу обрабатывать все downloadHandler
асинхронно?Я использую версию блестящего сервера с открытым исходным кодом.