Я начал использовать очередь задач, чтобы запланировать задачу, выполняющую много времени, в фоновом режиме. Задача, которую я хочу запустить, находится в 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, я ничего не вижу в журналах, кроме сообщения «Задача добавлена в очередь» из вышеприведенной функции. Как ни странно, в очереди задач в консоли администратора говорится, что задача была запущена в последнюю минуту, но не дает мне никаких подробностей об этом. Есть идеи?
EDIT: просто чтобы объяснить код, 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()
Это заполняет набор тестовых данных для моего алгоритма распределения (который принимает набор водителей и пассажиров и вычисляет оптимальный маршрут для них), а затем указывает алгоритм для запуска. Материал, отправляемый в журнал, содержится в методе alloc.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, ничего не происходит, но очередь задач сообщает, что что-то запустилось в последнюю минуту.