2011-02-07 6 views
2

Я пытаюсь создать и отладить мое первое приложение GAE и уже выиграл от огромной поддержки Stackoverflowers, чтобы получить, где у меня есть задачи, обрабатываемые в очереди по умолчанию , Благодаря!Каналы и TaskQueues в Google App Engine (отладка клиента)

Однако я хотел использовать Очереди, чтобы продемонстрировать, как вы будете делать «длинную» работу в фоновом режиме. Моя идея:

  1. Получить запрос на обработку большого файла.
  2. Сохраните файл и запустите задачу.
  3. Вернуть ответ.
  4. Обработать файл на фоне.
  5. Позвольте клиенту узнать через канал, что работа выполнена!

У меня есть все это, но для одной проблемы. На моем сервере разработки очередь задач, похоже, не обрабатывает задачи в фоновом режиме. Чтобы имитировать длительную работу, я просто высыпал там.

def post(self): 
    time.sleep(60) 
    #use a channel to let the client know we're done 

Похоже, что сервер разработки GAE является однопоточным. Он не отвечает вообще до тех пор, пока элемент не будет обработан из очереди? Правильно ли это предположение? Есть идеи?

Благодаря

Добавление кода exanples:

#code to enqueue task 
taskqueue.add(url='/processSubmission', params={'key': activity.key() }, transactional=False) 

#class that processes queued work 
class ProcessSubmission(webapp.RequestHandler): 
    def post (self): 
    time.sleep(60) 
    activity = db.get(db.Key(encoded=self.request.get('key'))) 
    activity.approved = True 
    activity.put() 
    channel.send_message(activity.userid, 'Wahoo! we are done') 
+0

Вы могли бы разместить соответствующую часть своего кода? – systempuntoout

+0

Готово - добавлен код. Надеюсь, этого достаточно. – ConfusedNoob

ответ

2

Да, dev_appserver App Engine является однопоточных, и только обрабатывает один запрос одновременно. Однако ваш запрос, обращенный к пользователю, должен вернуться до того, как он начнет обрабатывать запрос очереди задач.

+0

Я проверил эти многочисленные способы, и, похоже, это не так. Вы уверены, что он вернется, прежде чем заканчивать очередь? Если вы правы, тогда мой образец с каналами должен работать (я должен отметить, что я попробовал более простые настройки) – ConfusedNoob

+1

@ConfusedNoob Да - задачи выполняются асинхронно для пользовательских запросов. Обратите внимание, что API канала на dev_appserver использует опрос, но запросы опроса не пройдут, пока ваша задача не завершится, возможно, это причина того, что вы наблюдаете? –

+0

Это объясняет, почему весь сценарий не работает должным образом, но не почему он принимает ответ, который ставит задачу 60 секунд, чтобы пройти ... – ConfusedNoob