记录任务但未执行

时间:2014-12-20 20:32:34

标签: python google-app-engine

我有一个在我的数据库上运行的cron作业,并创建处理某些数据库记录的任务。 cron作业按预期运行,但添加taskqueue.add()的任务并不真正起作用。它们记录在应用程序的日志中,但没有任何反应。我还在任务中添加了一些logging.info()代码,但它没有执行。这真是令人费解,因为我没有得到任何错误,如果我直接访问任务(通过浏览器中的URL),它执行正常。

这是日志: enter image description here

这是empty_task.py代码:

import webapp2
import logging

class EmptyHandler(webapp2.RequestHandler):
    def get(self):
        logging.info("empty task!")

app = webapp2.WSGIApplication([
    ('/tasks/empty_task', EmptyHandler),
], debug=True)

修改

以下是cron.yaml代码:

cron:
- description: the shots dispatcher
  url: /tasks/run_schedules
  schedule: every 15 minutes

这是run_schedules代码:

import webapp2
import logging

from google.appengine.datastore.datastore_query import Cursor
from google.appengine.api import taskqueue

from models.schedule import Schedule

MAX_FETCH = 20

class RunSchedulesHandler(webapp2.RequestHandler):
    def get(self):
        cursor = Cursor(urlsafe=self.request.get('cursor'))
        scheds, next_curs, more = Schedule.query().fetch_page(MAX_FETCH, keys_only=True, start_cursor=cursor)

        for key in scheds:
            logging.info("adding to taskqueue schedule: {}".format(key.id()))
            taskqueue.add(url='/tasks/process_schedule', params={'sid': key.id()})
            taskqueue.add(url='/tasks/empty_task', params={'sid': key.id()})

        if more and next_curs:
            taskqueue.add(url='/tasks/run_schedules', params={'cursor': next_curs})

app = webapp2.WSGIApplication([
    ('/tasks/run_schedules', RunSchedulesHandler),
], debug=True)

1 个答案:

答案 0 :(得分:3)

任务执行的默认方法是POST。而且您只在GET中定义了EmptyHandler方法。查看appengine控制台状态。它返回405method not allowed

你可以使用2个解决方案。

解决方案1: 将方法名称更改为post。

class EmptyHandler(webapp2.RequestHandler):
    def post(self):
        logging.info("empty task!")

解决方案2:taskqueue.add()

中明确定义方法
taskqueue.add(url='/tasks/empty_task', params={'sid': key.id()}, method='GET')