AppEngine

时间:2016-01-27 07:05:40

标签: google-app-engine asynchronous google-app-engine-python

我正在构建一个基本上执行以下操作的应用程序:

  • 让用户输入某些参数。
  • 将这些参数传递给后端并根据这些开始执行任务 PARAMS。
  • 任务完成后,将用户重定向到另一个显示的页面 任务的结果。

这里的问题是这项任务需要很长时间。我因此希望使请求异步。 appengine是否允许这样做?

如果没有,我的选择是什么?我正在查看任务队列的文档。虽然它满足了我尝试做的部分工作,但我还不清楚当任务完成时队列如何通知客户端,以便可以启动重定向。

此外,如果必须将任务的结果返回给调用客户端本身,该怎么办?这可能吗?

1 个答案:

答案 0 :(得分:3)

你不能(不应该)等待完成,GAE不是为此而设计的。只需启动任务,获取任务ID(唯一的,在应用程序中保留它),并在响应启动请求时将ID发送回客户端。

客户端可以通过轮询(以合理的速率)或仅按需查看该状态页面(您可以使用该ID查找正确的任务)进行检查。如果您愿意,您甚至可以在该页面上添加进度/ ETA信息。

任务完成后,客户端的下一个状态检查请求可以重定向到您提到的结果页面。

此Q& A也可能有所帮助,这是一个非常类似的场景,只使用延迟库:How do I return data from a deferred task in Google App Engine

<强>更新

Task Queues优于延迟库,使用taskqueue.add()的可选countdowneta参数可以使用延迟功能:

  
      
  • 倒计时 - 此任务应运行或租用的未来秒数。默认为零。如果,请不要指定此参数   你指定了一个eta。

  •   
  • eta - 一个datetime.datetime,指定任务运行的绝对最早时间。如果,则无法指定此参数   指定了倒计时参数。这个论点可以是时间   区域感知或时区天真,或设置为过去的时间。如果   参数设置为None,默认值为now。对于拉动任务,没有   工人可以在eta指示的时间之前租用任务   参数。

  •