R Shiny 在不同进程中运行任务/脚本

标签 r asynchronous parallel-processing shiny officer

在我的 Shiny 应用程序中,用户可以生成大量的 powerpoint 报告。当它包含大量幻灯片时,可能需要 > 30 分钟才能完成。因此,我想在独立的进程/任务中处理这些任务,即使应用程序关闭也可以工作 - 例如用户单击按钮生成报告,关闭应用程序,当报告准备就绪时,应用程序通过电子邮件通知用户。
是否有任何好的做法或经过验证的解决方案来做到这一点?

我的第一个想法是使用 future包装与 plan(multisession)设置 - 但我不确定当用户关闭应用程序时会发生什么 - future session 是否也关闭?

最佳答案

本周我有幸参加了伦敦 EARL,我认为我在那里看到的最好的演讲之一就是关于这一点(Joe Cheng)。您需要 promises包为此工作,正如它在文档中所说的那样,一个特殊版本的 Shiny devtools::install_github("rstudio/shiny@async")支持异步编程。

您可以找到第一个文档 here使用 dplyr 了解这是如何工作的和 promises ( future 也兼容)。

作为一个小例子(取自文档),使用以下内容运行密集计算:

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

基本上会返回控制台光标,允许您运行任何其他您想要的命令,并会自动打开 View完成后选项卡。我可能会稍微挖掘出一个 Shiny 的例子,但请记住,这仍在开发中,将在今年年底之前发布(我想有更全面的文档)。

关于R Shiny 在不同进程中运行任务/脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266338/

相关文章:

java - 如何优化这个for循环的计算速度?

scala - Spark 执行并行度不够的任务

r - R 的 `base::factorial` 是否被内存?

地理信息系统 : find borders between polygons

r - 如何在 dplyr 中提取一个特定组

c# - 如何在 C# 中异步读取结束进程输出?

javascript - axios 返回未定义的 GET 请求

r - 根据列值扩展数据框

c++ - boost ASIO async_read_until 不编译 ASIO ssl 客户端示例

c++ - 使用并行线程填充集合有什么危险吗?