【问题标题】:GAE: Request needs more than 30sGAE:请求需要超过 30 秒
【发布时间】:2012-02-01 00:34:10
【问题描述】:

如何为特定的 cron/请求禁用 Google App Engine 请求超时。

我正在创建一些需要超过 30 秒处理的例程,而 GAE 总是终止我的例程。

有什么解决办法吗?

【问题讨论】:

    标签: java google-app-engine servlets timeout


    【解决方案1】:

    一个选项是Task Queues,有 10 分钟的时间限制。

    另一个是Backends,没有时间限制。

    【讨论】:

    • 我正在通过后端 cron 执行,但我在 30 秒内超时
    • 你在做 URLFetch 吗?它有 5s 超时。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我使用后端来运行需要更多 CPU 时间的任务,并且运行良好。 虽然是基于python的,但相信概念应该是一样的。

      A.使用 cron 执行任务 例如:

      cron:
      - description: Start Backend to parse the log
        url: /_ah/start/ParseLog/
        schedule: every day 00:00
      

      B. cron 执行的任务是在前端运行的,所以还是有时间限制的。因此,我将任务转发到后端(名为“worker”)以避免时间限制。

      class ParseLogStarter(webapp.RequestHandler):
          # run on frontend
          def get(self):
              self.post()
      
          def post(self):
              date = self.request.get("date")
              # do nothing but forwarding to backend "worker"
              taskqueue.add(url="/_ah/ParseLog/", params={"date":date}, target='worker') 
      

      C.在后端,接收转发的任务并处理例程作业。

      class ParseLogWorker(webapp.RequestHandler):
          # run on backends
          def get(self):
              self.post()
      
          def post(self):
              # do your routines job here
      

      【讨论】:

        【解决方案4】:

        我同意,您可以使用任务队列,它们的超时时间为 10 分钟,我刚刚在最近的一个项目中使用了任务队列,并且我做了一些代码来使用方便的参数重新排队相同的任务,如果需要超过 10 分钟,所以我避免使用更昂贵的后端。

        【讨论】:

          猜你喜欢
          • 2023-02-06
          • 2021-08-25
          • 1970-01-01
          • 2022-11-02
          • 2015-03-08
          • 2022-08-04
          • 2011-12-02
          • 1970-01-01
          • 2019-11-03
          相关资源
          最近更新 更多