如何增加Google App Engine请求计时器。默认值为60秒

时间:2017-03-30 10:37:57

标签: php google-app-engine gcloud

我有一个在Google Cloud Engine上运行的PHP脚本,它会触发SQL查询,查询有时需要超过60秒才能执行。 如果请求在60秒内未能返回且抛出DeadlineExceededError且未捕获,则请求将中止,并返回500内部服务器错误。文档中提到了以下内容。

  

Google App Engine请求计时器(Java / Python / Go)可确保请求具有有限的生命周期,并且不会陷入无限循环。目前,前端实例请求的截止时间为60秒。 (后端实例没有相应的限制。)每个请求,包括预热(请求/ _ah / warmup)和加载请求(" loading_request = 1"日志标题)都受此限制

我已经完成了this link,它解释了如何避免此类错误,但我的查询是在一个繁重的数据库上运行,这需要一段时间来获取所有结果。

我的问题是如何增加请求计时器以便能够运行长时间运行的任务。如果不可能,有任何替代方案可以达到这样的目的。

1 个答案:

答案 0 :(得分:1)

如果您的代码在请求处理程序中运行,则默认情况下会有一个App-Engine强制执行的60秒截止日期。你无法改变它。请参阅此页面下“缩放类型”下的图表的“截止日期”行/“自动缩放”列:

https://developers.google.com/appengine/docs/java/modules/

但是,如果您将模块更改为使用“手动缩放”和“B1” - “B4”实例,则此代码将能够运行几个小时。例如:

默认/ SRC /主/ web应用/ WEB-INF /应用服务引擎-web.xml中:

<?xml version="1.0" encoding="utf-8"?>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <application>myapp</application>
        <module>default</module>
        <version>1</version>
        <threadsafe>true</threadsafe>
        <instance-class>B1</instance-class>
        <manual-scaling>
              <instances>1</instances>
        </manual-scaling>
   </appengine-web-app>

在这种类型的实例中,您的请求通常不会超时数小时。