我已经开始使用任务队列来安排在后台运行的时间密集型任务。我想要运行的任务是在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没有任何事情发生但是任务队列说它在过去一分钟内运行了什么。
答案 0 :(得分:1)
看起来你的/test
脚本是从我只能假设的会话中获取的,然后根据它重定向。这显然不适用于任务队列任务 - 没有用户,因此没有会话。