在谷歌应用引擎中使用任务队列时遇到一些问题。我尝试做与本网站相同的事情: 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')
我真正想要的只是运行一段不会超时的代码。所以我读到我可以使用任务队列。但我似乎无法让它发挥作用。
请您参考如下方法:
默认情况下,任务队列会向映射到 URL 的任何处理程序发送 POST 请求(在您的例子中是/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可能更合适。
