Google App Engine:任务与线程?

时间:2010-08-04 16:55:58

标签: java google-app-engine multithreading scheduled-tasks

我有一个本地科学应用程序,它使用线程来处理大型计算的独立部分。我的小组希望这个成为一个Web应用程序,所以现在我正在弄清楚如何移植它(所以请原谅任何完整的骨头语句)。我正在使用Google App Engine来处理它的“网络”部分,但我还在研究其他适合的翻译。

我的第一个倾向是完全按原样保留计算(例如,将一些网页表格数据消化成适当的格式,然后将其传递给计算机产生线程等)。

但是,我也在阅读Queue s + TaskOptions - 这类似于我应该使用的内容,而不是ExecutorService + Callable。单个子计算可能需要一些时间来处理(尽管它们在所需的时间量上也可能有很大差异),所以我想理想情况下我希望用户请求整个计算然后被带到一个加载的页面结果可用。

Queue s + TaskOptions是否正确使用?如果不是,那是什么?如果是这样,那么我想要做的是否有方便的平行示例?

最后,我的小组对计算内部的广泛发布存在一些短期疑虑,因此它的详细信息都是服务器端的 - 是否应该消除这些问题?

最终(在一些出版物等之后),我们计划公开提供这些内部结构,然后可能是网络版本可以移动计算客户端。现在是否有一种更好的实施方式可以使未来的翻译更简单?或者甚至不值得担心(因为我已经在我的本地应用程序中有效地拥有“客户端”版本)?

2 个答案:

答案 0 :(得分:3)

  1. 应用引擎中的所有请求(包括任务)的时间限制为30秒。如果你的计算时间比这要长,你需要找出一种方法将它们分解成更小的块。 App引擎的最佳点是网络应用,而非数字运算。

  2. 如果您希望能够在客户端和服务器端共享代码,可以选择查看GWT。 (谷歌网络工具包)它将允许您使用java源代码编写客户端,然后将其转换为javascript。这将是重用已有的数字运算代码的一种方法。

答案 1 :(得分:2)

您无法在App Engine上创建线程。任务队列+任务选项将是最佳选择。

如果你想把内容保持在内部 - 那么将它保存在服务器端将是最安全的事情。但是,您可以考虑将工作流程作为服务公开,以便将来客户端可以与同一服务进行通信。