r - 异步 Shiny 编程 - 设置一个基本示例

标签 r shiny

作为练习,我修改了默认的 Old Faithful Geyser Data 应用程序以合并异步编程。然而,根据我对异步编程的理解,它的行为并不能满足我的期望,我怀疑我存在根本性的误解。

在这里,应用程序创建了 2 个相同的绘图输出。一个比另一个花费更长的时间,但设置为异步工作,另一个很快。

server.R

library(future)
library(promises)
library(shiny)
plan(multisession)

function(input, output) {

    bins = reactive({
        future({
            print("I'm slow")
            Sys.sleep(10)
            faithful[, 2]
        }) %...>% 
        {seq(min(.), max(.), length.out = input$slow_bins + 1)}
    })

    output$slow_dist_plot <- renderPlot({
        bins() %...>%
        {hist(faithful[, 2], breaks = ., col = 'darkgray', border = 'white')}

    })

    output$fast_dist_plot = renderPlot({
        print("I'm fast")
        x    <-faithful[, 2] 
        bins = seq(min(x), max(x), length.out = input$fast_bins + 1)
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })

}

ui.R

library(shiny)

fluidPage(
    titlePanel("Old Faithful Geyser Data"),
    sidebarLayout(
        sidebarPanel(
            sliderInput("slow_bins",
                        "Number of slow bins:",
                        min = 1,
                        max = 50,
                        value = 30),
            sliderInput('fast_bins',
                        'fast bins',
                        min = 1,
                        max = 50,
                        value = 30)
        ),
        mainPanel(
            plotOutput("slow_dist_plot"),
            plotOutput("fast_dist_plot")
        )
    )
)

基于我对异步编程的理解主要来源于this Rstudio 帖子,如果两个用户同时运行此代码,在两个图的初始绘图之后,如果其中一个用户更改慢速箱,另一个用户应该可以自由地使用快速箱并获得即时图因为其他用户请求由新流程处理。

但是,当我实际尝试使用两个窗口进行此操作时,我发现每当我在慢速容器中进行更改时,其他窗口都必须等待慢速容器完成。这里出了什么问题?是我的期望有误还是我设置有误?

最佳答案

问题中的预期行为是正确的。但是,在单核机器上,使用 multisession 计划时,worker 的数量默认设置为 1。做

plan(multisession,workers = 2)

将具有预期的行为。提高这个数字对于正在使用的应用程序来说可能是必要的。

关于r - 异步 Shiny 编程 - 设置一个基本示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52864035/

相关文章:

r - 在 R 中从列表转换为 data.frame 时,utf-8 字符会丢失

r - R 中的 Predict.lm() - 如何在拟合值周围获得非常量的预测带

javascript - 单击嵌入 Shiny 的 googlevis 折线图中的图例时如何隐藏系列

r - 如何从R Shiny 的选择输入(multiple = TRUE)动态定义公式

R 绘图扩展跟踪 : Change to incremental and clear data

r - 如何一次替换多个值

r - 在 knitr 中打印 HTML 或 Word 表,以便考虑字符串中的空格

R Lavaan 包错误 : some latent variable names collide with observed variable names

R Shiny 的对象范围

radio-button - 基于 R Shiny 条件面板中的单选按钮的切换图