2017-09-17 2 views
6

내 반짝이는 앱 사용자는 파워 포인트 보고서를 생성 할 수 있습니다. 슬라이드가 많으면 30 분 이상 걸릴 수 있습니다. 따라서 앱을 종료해도 작업 할 수있는 독립적 인 프로세스/작업에서 이러한 작업을 처리하고 싶습니다. 사용자가 버튼을 클릭하여 보고서를 생성하고, 앱을 종료하며, 보고서가 준비되면 앱을 이메일로 알려줍니다. 이렇게하는 좋은 방법이나 입증 된 솔루션이 있습니까?R 다른 프로세스의 반짝이는 작업/스크립트

내 생각에 future 패키지가 plan(multisession)으로 설정되어 있었는데 사용자가 앱을 닫을 때 어떤 일이 발생하는지 잘 모르겠다 - future 세션이 닫히지 않습니까?

+0

'mcparallel'이 효과가 있습니까? https://stat.ethz.ch/R-manual/R-devel/library/parallel/html/mcparallel.html –

+0

@Roman Luštrik는, 그래,하지만'제가 종료 후에도 작동 독립적 인 세션을 만들 수 mcparallel' 않습니다 앱? – Taz

+0

유닉스 머신에 액세스 할 수 없기 때문에 실제로 테스트 할 수는 없습니다. –

답변

8

나는 런던의 EARL에 이번 주에 도착할만큼 충분히 행운이었고, 내가 본 가장 좋은 프리젠 테이션 중 하나가 정확하게 이것 (조 쳉)에 관한 것이라고 생각한다. 이 기능을 사용하려면 promises 패키지가 필요하며 문서에는 비동기 프로그래밍을 지원하는 반짝이는 특수 버전 인 devtools::install_github("rstudio/[email protected]")이 나와 있습니다.

dplyrpromises (future도 호환 가능)을 사용하여 첫 번째 문서 here을 찾을 수 있습니다. 사용 집중적 인 계산을 실행 (문서에서 가져온) 작은 예를 들어

, 다음

read.csv.async("data.csv") %...>% 
    filter(state == "NY") %...>% 
    arrange(median_income) %...>% 
    head(10) %...>% 
    View() 

기본적으로 자동으로 당신이 원하는 다른 명령을 실행하고자 할 수 있도록, 다시 콘솔 커서를 반환 이 작업이 완료되면 View 탭을 엽니 다. 조금은 반짝이는 예제를 파헤쳐 볼 수도 있지만, 아직 개발 중이며 연말 전에 출시 될 것임을 명심하십시오. (내가 상상할 수있는보다 포괄적 인 문서를 가지고)

+2

미래의 저자; 조가 여기에서 일하는 것이 이것을 해결할 것 인 지 확인하고 있습니다. (OP가 앱을 닫고 나중에 다시 돌아 오기를 원하는 부분은 까다 롭습니다. 할일 목록에 지속적인 직렬 가능 및 재로드 가능한 미래에 대한 지원이 있지만 시간이 좀 걸릴 것입니다. – HenrikB

0

그래서 future 패키지를 사용하여 몇 가지 예제를 보았습니다. 코드가 앱이 닫힌 경우에도 별도의 세션 (클러스터)에서 실행됩니다. 다음 단계는 프로세스가 아직 실행 중이거나 완료되었는지 확인하는 방법을 파악하는 것입니다. 어떤 아이디어?

library(future) 
cl <- parallel::makeCluster(2L) 
plan(cluster, workers = cl) 

server <- function(input, output) { 
    observeEvent(input$run, { 

    iteration <- as.numeric(input$iteration) 
    path <- input$path 

    future::future({ 
     writeLog <- function(n, path) { 
     file.remove(path) 
     for (i in 1:n) { 
      cat("#", i, "-", as.character(Sys.time()), "\n", file = path, append = TRUE) 
      Sys.sleep(1) 
     } 
     } 
     writeLog(iteration, path) 
    }, globals = c("iteration", "path")) 
    }) 
} 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     tags$div("This app writes to file in cluster which means it is computed in parallel to this session. 
       It will execute even when app is closed.") 
     , br() 
     , shiny::textInput("path", "Path to log file", value = "/src/dev/export_performance/future.log") 
     , shiny::textInput("iteration", "Iteration number", value = 60)  
    ), 
    mainPanel(
     br() 
     , actionButton("run", "Run future") 
    ) 
) 
) 

shinyApp(ui = ui, server = server) 
관련 문제