【问题标题】:google app engine taskqueues谷歌应用引擎任务队列
【发布时间】:2012-11-13 04:52:32
【问题描述】:

在谷歌应用引擎中使用任务队列时遇到一些问题。我尝试在这个网站上做同样的事情: https://developers.google.com/appengine/docs/python/taskqueue/overview-push

但似乎我的任务从未执行,我收到此错误:

警告 2012-11-25 15:29:21,258 taskqueue_stub.py:1978] 任务 task1 未能执行。此任务将在 12.800 秒后重试

除了这些之外,代码基本相同:

class CounterWorker(webapp.RequestHandler):
  def init(self): # should run at most 1/s
    def txn():
      logging.info("bla")
    db.run_in_transaction(txn)

我只是像这样添加任务:

taskqueue.add(url='/worker')

我真正想要的只是运行一段不会超时的代码。所以我读到我可以使用任务队列。但我似乎无法让它工作。

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    默认情况下,任务队列将 POST 请求发送到映射到 URL 的任何处理程序(在您的情况下是 /worker,它应该映射到 CounterWorker)。因此,您需要在 CounterWorker 方法中定义一个 post 方法。

    class CounterWorker(webapp.RequestHandler):
      def post(self):
        def txn():
          logging.info("bla")
        db.run_in_transaction(txn)
    

    您的评论表明任务应该只运行 1/s。您可以在 queue.yaml config file 中定义它。

    另外,任务队列有 10 分钟的超时时间,所以它们不会永远运行。要纠正这个问题,请尝试链接它们或使用deferred API。对于长时间运行的进程,backends API 可能更合适。

    【讨论】:

    • 感谢您的回答,但另一个是主要解决方案。我支持你:)
    【解决方案2】:

    如果您只想执行“普通”任务,请查看延迟函数。

    Background work with the deferred library

    from google.appengine.ext import deferred
    
      def do_something_expensive(a, b, c=None):
          logging.info("Doing something expensive!")
          # Do your work here
    
      # Somewhere else
      deferred.defer(do_something_expensive, "Hello, world!", 42, c=True)
    

    您不需要 url/webapp 处理程序,因为您可以直接传递函数。

    【讨论】:

    • 糟糕,评论的地方有误。将您的答案标记为解决方案:) 非常感谢
    • 现在我得到 PicklingError: Can't pickle : 当我想在我的 MainHandler 中调用一个函数时,它找不到 _sre.SRE_Pattern :(跨度>
    • 我猜这是因为在任务返回时该处理程序早已不复存在。如果您只需要一个可以永远运行的处理程序,如果需要,您是否查看过后端? developers.google.com/appengine/docs/python/backends
    • 是的,我看过它,但我真的认为使用它有点矫枉过正。我发现在不超时的情况下运行一段代码如此困难,这让我感到非常惊讶。
    • 真的没有那么糟糕,而且它们非常方便,因为其他原因以及在需要时保持状态。
    猜你喜欢
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多