GAE Task Queue: задача не выполняется / не выводится - PullRequest
1 голос
/ 03 апреля 2011

Я начал использовать очередь задач, чтобы запланировать задачу, выполняющую много времени, в фоновом режиме. Задача, которую я хочу запустить, находится в 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, ничего не происходит, но очередь задач сообщает, что что-то запустилось в последнюю минуту.

1 Ответ

1 голос
/ 04 апреля 2011

Похоже, ваш /test скрипт извлекает из того, что я могу только предположить, является сеансом, а затем перенаправляю на основе этого.Очевидно, что это не сработает в задаче «Очередь задач» - нет пользователя и, следовательно, нет сеанса.

...