谷歌应用程序引擎任务队列

WYS*_*WYS 1 python google-app-engine

在谷歌应用引擎中使用任务队列有一些问题.我尝试过与此网站相同的操作: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)
Run Code Online (Sandbox Code Playgroud)

我只是添加这样的任务:

taskqueue.add(url='/worker')
Run Code Online (Sandbox Code Playgroud)

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

Gwy*_*ell 5

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

class CounterWorker(webapp.RequestHandler):
  def post(self):
    def txn():
      logging.info("bla")
    db.run_in_transaction(txn)
Run Code Online (Sandbox Code Playgroud)

您的评论表明任务应该只运行1/s.您可以在queue.yaml配置文件中定义它.

此外,任务队列有10分钟超时,所以他们不会永远运行.要解决此问题,请尝试链接它们或使用延迟API.对于长时间运行的进程,后端API可能更适合.