我正在处理一个处理大型数据集和电子邮件结果的Shiny服务器。我们已经编写了计算和邮寄结果的代码,但我们希望实现一个排队系统来按照收到的顺序处理每个提交。
我计划使用此处描述的Queue类:http://www.r-bloggers.com/implementing-a-queue-as-a-reference-class/
目前我们的流程如下:
注意:对邮件和绘图的调用未设置为" local = TRUE",因此它们位于全局环境中。
我的想法是:
问题是我不确定如何允许Queue文件接受异步调用以将新数据推送到队列结构上。看作startServer是一个每会话环境,在实现共享队列时我必须考虑什么。
我用于参考的链接: https://gist.github.com/thesamuel/2450bbee9ef3082e21f68d37b1d40060
提前致谢,如果我遗漏了任何内容,请告诉我。
答案 0 :(得分:0)
有可能这样做。当然,有一些代码片段被设计为允许从Shiny应用程序调用异步代码。请参阅https://gist.github.com/jcheng5/9504798d93e5c50109f8bbaec5abe372 https://gist.github.com/andrewsali/3317e5954459fef2f5fed68d68c1ac92(在异步任务运行后使用被动更新闪亮输出)和https://github.com/alexbbrown/mURL(异步HTTP,专为在Shiny中使用而设计)。请注意,这些都是实验性/ PoC代码,它们可能会帮助您修补解决方案,但不太可能为您开箱即用。
但是,我建议你不要使用这种方法。您的要求如下所示:
在你的位置,我会以最简单的方式写入Shiny外部的队列。例如,附加到文件或向数据库添加行。然后可以立即继续闪亮的互动。您可以在Shiny之外设置一个完整的单独进程,该进程将从文件/表中读取,并在每次执行时发送电子邮件。
事实上,你很幸运,你发送的电子邮件完全可以在Shiny之外完成,而不是需要完整(和复杂)的异步。