Skip to content

stopMulticoreFuture Example Fails #27

Description

@karchjd

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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions