【发布时间】:2016-05-26 00:56:07
【问题描述】:
我正在开发一个处理大型数据集和电子邮件结果的 Shiny 服务器。我们已经编写了代码来计算和邮寄结果,但我们想实现一个排队系统来按收到的顺序处理每个提交。
我计划使用此处描述的 Queue 类:http://www.r-bloggers.com/implementing-a-queue-as-a-reference-class/
目前我们的流程是这样的:
- 一个人将一个 CSV 文件和他们的电子邮件输入到我们闪亮的应用程序中。
- startServer 文件观察提交按钮,并调用绘图方法(在 plotting.R 中),该方法将数据绘制为 PNG,并返回文件名。
- 然后,shinyServer 将返回的文件名和电子邮件传递给邮寄数据的邮寄方法(在 mail.R 中)。
注意:对邮件和绘图的调用没有设置为“local=TRUE”,因此它们是在全局环境中。
我的想法是:
- 在 startServer 方法之外但仍在 server.R 中声明一个 Queue 对象 (q) 并调用 q$push(inputtedData, email)。
- 从那里,队列对象将进行调用以计算并将文件邮寄给客户端,并等到每个作业完成后再进行下一个作业。
问题是我不确定如何让队列文件接受异步调用以将新数据推送到队列结构中。看到 startServer 是一个每个会话的环境,我在实现共享队列时必须考虑什么。
我用作参考的链接: https://gist.github.com/thesamuel/2450bbee9ef3082e21f68d37b1d40060
提前致谢,如有遗漏请告诉我。
【问题讨论】:
-
promise和future会解决您的问题吗(链接:rstudio.github.io/promises/index.html)?
标签: r asynchronous shiny-server shiny