【问题标题】:Schedule a task (update data) each monday in Shiny每个星期一在 Shiny 中安排一个任务(更新数据)
【发布时间】:2021-04-25 19:19:50
【问题描述】:

我有一个住在 Shiny Server pro 中的仪表板,它显示不同的分析。数据来自一个需要大约 20 分钟才能完成的长查询。

在我当前的设置中,我有一个更新数据的按钮:

  1. 查询新数据
  2. 转换数据
  3. 将数据保存在 .RData 文件中
  4. 将数据保存在全局对象中(使用data <<-

以防万一,在服务器和 ui 函数之外,我有一个检查数据对象是否存在的语句。如果不存在,它会从 .RData 文件中读取数据,而不是再次进行查询。

现在我想在每周一下午 5:00 更新数据(我不想每周一打开应用程序并按下按钮)。我认为最好的方法是使用使用 cronR 的 cron 作业。代码将位于服务器和 ui 函数之外的 app.R 中。现在我有以下问题:

  1. 如果我使用 Shiny server pro 多少次,如果应用程序位于服务器和 ui 功能之外的 app.R 中,该应用程序将创建 cron 作业?
  2. 如何在闪亮的应用程序中替换对象data?这样,如果用户在星期一下午 5:00 之后打开应用程序,数据就会到位,无需读取 .RData 文件,当然也无需再次进行查询。
  3. 最佳做法是什么?

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    只需完全在闪亮的应用程序之外使用 cronR 创建您的 cron 进程,并确保它将您的数据保存到正确的位置。

    创建获取数据的 R 代码:

    library(...)
    # ...
    # x <- mydata
    save(x, file = "NewData.Rda")
    

    创建 cron 作业:

    cmd <- cron_rscript("path/to/getdata.R")
    cron_add(cmd, frequency = 'daily', id = 'job5', at = '05:00')
    

    【讨论】:

    • 到目前为止,这就是我正在做的事情。问题是,当用户使用 `reactiveFileReader()` 打开应用程序时,应用程序开始读取 NewData.Rda,这也需要一两分钟。我想在环境中有对象,这样当用户打开应用程序时,文件已经加载完毕,不需要等待一两分钟就可以加载文件了。
    • 如果文件读取是一个瓶颈,请考虑更好的方法来存储数据,以便您可以更快地读取内容
    【解决方案2】:

    我看不出您的观点 1. 我认为,如果应用程序未命名为“global.R”或“ui.R”或“server.R”,该应用程序将不会创建 cron 作业。此外,您不必将代码放在 /srv/shiny-server/ 目录下。

    对于您的第 2 点,请检查闪亮库中的 reactiveFileReader 函数。此函数检查文件的最后修改时间,如果文件更改,则重新读取文件

    data <- reactiveFileReader(5*60*1000, filePath="NewData.Rda", readFunc = load) 
    

    【讨论】:

    • reactiveFileReader 只检查会话是否打开,对吗?我希望已经创建了对象数据。
    • 是的。 reactiveFileReader 更新数据以供 Shiny 会话使用。我知道您将使用 R 文件来创建由 cron 启动的数据,当新会话打开时,您的闪亮应用程序将使用该数据,或者,如果在会话期间修改了数据,则使用 reactiveFileReader
    • "我想让对象在环境中,这样当用户打开应用程序时,文件已经加载,不需要等待一两分钟。加载”。我对应用程序有同样的问题。我发现的唯一技巧是在 cron bash 结束时自动 ping 应用程序(在数据更新后,使用例如在 Linux 下“curl -ks your site”)。此外,我使用“app_idle_timeout = 0”修改了这个特定应用程序的闪亮服务器配置,使其永远不会空闲(否则,您将不得不再次等待)。
    • 没错,我在考虑如何 ping 应用程序以加载对象,但我也看到,正如你所说,当应用程序空闲时,该对象被删除。
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多