GAE任务队列:任务未运行/输出

时间:2011-04-03 11:36:05

标签: python google-app-engine scheduled-tasks

我已经开始使用任务队列来安排在后台运行的时间密集型任务。我想要运行的任务是在URL'/ test'中,我用来安排任务的URL是'/ bgtest'。这是'/ bgtest'的处理程序:

class RunTestAsBackgroundProcess(BaseHandler):
def get_secure(self):
    taskqueue.add(url='/test', method='GET')
    logging.debug("Task added to queue")
    return

'/ test'任务将数据输出到日志中,当我正常访问/测试时,它会执行,结束,我可以在日志中找到结果。但是,当我运行/ bgtest时,除了上面函数中的“任务添加到队列”消息之外,我在日志中看不到任何内容。奇怪的是,在管理控制台的任务队列中,它表示任务已在最后一刻运行但未向我提供任何有关它的详细信息。有什么想法吗?

编辑:只是为了解释代码,BaseHandler是我用来检查用户登录到Facebook的超类,而get_secure()是在超类'get()方法之后调用的方法。

编辑:/ test运行此类:

class CalculateTestAllocations(BaseHandler):
def get_secure(self):
    dbuser = db.GqlQuery("SELECT * FROM User WHERE fbid = :1", self.user['uid'])[0]
    if (dbuser.isadmin != True):
        self.redirect('/')

    #test data
    drivers = []
    passengers = []

    drivers.append(allocation.Driver("01", allocation.Location(51.440958, -2.576318), 3, 1000)) # coming from Bristol
    drivers.append(allocation.Driver("02", allocation.Location(55.935628, -3.285044), 3, 1000)) # coming from Edinburgh

    passengers.append(allocation.Passenger("03", allocation.Location(51.483193, -3.208187), 1000)) # coming from Cardiff
    passengers.append(allocation.Passenger("04", allocation.Location(52.469263, -1.860303), 1000)) # coming from Birmingham
    passengers.append(allocation.Passenger("05", allocation.Location(53.783703, -1.541841), 1000)) # coming from Leeds
    passengers.append(allocation.Passenger("06", allocation.Location(54.973994, -1.636391), 1000)) # coming from Newcastle

    logging.debug("Running allocation engine now (GET)")

    alloc = allocation.Allocation()
    alloc.buildProblem(drivers, passengers, allocation.Location(52.951923, -1.169967)) # destination at Nottingham
    alloc.solveAndOutput()

这为我的分配算法填充了一组测试数据(它接收一组驱动程序和乘客并为它们计算最佳路径),然后告诉算法运行。发送到日志的内容包含在allocation.solveAndOutput()方法中,它执行此操作:

def solveAndOutput(self):
    routes = self.solveProblem()
    logging.warn("Num routes: "+str(len(routes)))
    logging.warn("Length of first route: "+str(len(routes[0])))
    for route in routes:
        print self.getStaticMapAddress(route)
        logging.debug(self.getStaticMapAddress(route))

正如我所说,如果我只是运行/测试我得到这些输出,但是如果我运行/ bgtest没有任何事情发生但是任务队列说它在过去一分钟内运行了什么。

1 个答案:

答案 0 :(得分:1)

看起来你的/test脚本是从我只能假设的会话中获取的,然后根据它重定向。这显然不适用于任务队列任务 - 没有用户,因此没有会​​话。