0

我在 GAE-Python 上的网站具有使用进化优化算法计算一些数学的功能,当用户单击按钮时,将由 ajax 请求调用该算法。每个请求通常需要很长时间才能完成计算。

我需要某种方式(ajax 或其他方法)来告诉服务器取消当前请求,而不是使用xhr.abort()不会停止服务器端计算的 ajax 函数。

对于早期的尝试,我发现 GAE 具有请求计时器,DeadlineExceededError如果请求需要太长时间才能完成,运行时将在该计时器中引发。

基于这个思路,请问有没有办法给服务器发送信号,让runtime触发请求的中断?

4

1 回答 1

0

您不应该尝试在处理程序中同步执行任何长时间运行的任务。这是任务队列的完美候选。Ajax 请求应该简单地将任务推送到队列中,App Engine 将离线处理它。任务有十分钟的超时。

您可以使用 memcache 或数据存储在 Ajax 代码之间传递信息。例如,任务处理程序可以每隔几秒检查一次内存缓存是否存在“stop_processing_FOO”键(其中 FOO 是第一次触发任务时由 Ajax 生成的唯一 ID),并且您的“取消”按钮将调用处理程序将该密钥插入到内存缓存中。

类似地,任务可以在完成时将带有相关值的“finished_processing_FOO”键放入内存缓存中,并且您的 Ajax 可以定期轮询处理程序以检查该键是否存在,如果存在则返回值。

于 2013-07-09T08:37:03.467 回答