-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Hello, for me, the stopMulticoreFuture Example from the documentation fails. If I press cancel, the process does not stop and I get error Warning: Error in stopMulticoreFuture: stopMulticoreFuture only works on multicore futures and the app crashes after the 10 seconds wait.
Here is my sessionInfo output:
R version 4.4.1 (2024-06-14)
Platform: aarch64-apple-darwin20
Running under: macOS Sonoma 14.1.1
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
time zone: Europe/Amsterdam
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] promises_1.3.0 future_1.34.0 ipc_0.1.4 shiny_1.9.1
loaded via a namespace (and not attached):
[1] crayon_1.5.3 cli_3.6.3 rlang_1.1.4 jsonlite_1.8.9 xtable_1.8-4 listenv_0.9.1
[7] backports_1.5.0 htmltools_0.5.8.1 httpuv_1.6.15 sass_0.4.9 jquerylib_0.1.4 filelock_1.0.3
[13] base64url_1.4 fastmap_1.2.0 lifecycle_1.0.4 memoise_2.0.1 compiler_4.4.1 codetools_0.2-20
[19] Rcpp_1.0.13 rstudioapi_0.16.0 later_1.3.2 digest_0.6.37 R6_2.5.1 parallelly_1.38.0
[25] parallel_4.4.1 magrittr_2.0.3 bslib_0.8.0 tools_4.4.1 withr_3.0.1 txtq_0.2.4
[31] mime_0.12 globals_0.16.3 cachem_1.1.0
The example from the documentation
library(shiny)
library(ipc)
library(future)
library(promises)
plan(multicore) # This will only work with multicore, which is unavailable on Windows
inaccessableAnalysisFunction <- function(){
Sys.sleep(10)
data.frame(result="Insightful analysis")
}
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Cancelable Async Task"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
actionButton('run', 'Run'),
actionButton('cancel', 'Cancel')
),
# Show a plot of the generated distribution
mainPanel(
tableOutput("result")
)
)
)
server <- function(input, output) {
fut <- NULL
result_val <- reactiveVal()
running <- reactiveVal(FALSE)
observeEvent(input$run,{
#Don't do anything if in the middle of a run
if(running())
return(NULL)
running(TRUE)
print("Starting Run")
result_val(NULL)
fut <<- future({
result <- inaccessableAnalysisFunction()
})
prom <- fut %...>% result_val
prom <- catch(fut,
function(e){
result_val(NULL)
print(e$message)
showNotification("Task Stopped")
})
prom <- finally(prom, function(){
print("Done")
running(FALSE) #declare done with run
})
#Return something other than the future so we don't block the UI
NULL
})
# Kill future
observeEvent(input$cancel,{
#
# Use this method of stopping only if you don't have access to the
# internals of the long running process. If you are able, it is
# recommended to use AsyncInterruptor instead.
#
stopMulticoreFuture(fut)
})
output$result <- renderTable({
req(result_val())
})
}
# Run the application
shinyApp(ui = ui, server = server)
Metadata
Metadata
Assignees
Labels
No labels