我有一个在我的数据库上运行的cron作业,并创建处理某些数据库记录的任务。 cron作业按预期运行,但添加taskqueue.add()
的任务并不真正起作用。它们记录在应用程序的日志中,但没有任何反应。我还在任务中添加了一些logging.info()
代码,但它没有执行。这真是令人费解,因为我没有得到任何错误,如果我直接访问任务(通过浏览器中的URL),它执行正常。
这是日志:
这是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)
答案 0 :(得分:3)
任务执行的默认方法是POST
。而且您只在GET
中定义了EmptyHandler
方法。查看appengine控制台状态。它返回405
即method 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')