shiny.worker
allows you to delegate heavy computation tasks to a separate process, such that it does not freeze your Shiny app.
See live example here.
Initialise your worker at the beggining of your app.
Then, in the server of your Shiny app define a promise that returns a reactive when your heavy job will be completed.
my_heavy_calculations <- function(args) {
# ...
args
}
# this reactive object is used to trigger the job start,
# but also to pass parameters to the function
reactive_arguments <- reactive({
input$start
list(r = rnorm(1))
})
# resultPromise will be a reactive value with results returned by my_heavy_calculations
resultPromise <- worker$run_job("job1", my_heavy_calculations, args_reactive = reactive_arguments)
resultPromise()$result # contains the result of the calculations
resultPromise()$resolved # contains flag that informs whether the job has finished or not
See more examples in the examples/
folder.
Appsilon is the Full Service Certified RStudio Partner. Learn more at: appsilon.com or get in touch: dev@appsilon.com
.