我正在构建一个基本上执行以下操作的应用程序:
这里的问题是这项任务需要很长时间。我因此希望使请求异步。 appengine是否允许这样做?
如果没有,我的选择是什么?我正在查看任务队列的文档。虽然它满足了我尝试做的部分工作,但我还不清楚当任务完成时队列如何通知客户端,以便可以启动重定向。
此外,如果必须将任务的结果返回给调用客户端本身,该怎么办?这可能吗?
答案 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()的可选countdown
或eta
参数可以使用延迟功能:
倒计时 - 此任务应运行或租用的未来秒数。默认为零。如果,请不要指定此参数 你指定了一个eta。
eta - 一个
datetime.datetime
,指定任务运行的绝对最早时间。如果,则无法指定此参数 指定了倒计时参数。这个论点可以是时间 区域感知或时区天真,或设置为过去的时间。如果 参数设置为None,默认值为now。对于拉动任务,没有 工人可以在eta指示的时间之前租用任务 参数。