Асинхронный вызов в google appengine с использованием очередей задач в python - PullRequest
1 голос
/ 07 сентября 2011

Я новичок в очереди задач API в Google App Engine. Я создал новую очередь и добавил в нее задачу с помощью функции taskqueue.add (). Я определил URL задачи и записал логику для задачи. Но задача НЕ ПРОИСХОДИТ АСИНХРОННО, так как приложение ожидает завершения задачи, а затем продолжает выполнение оператора после функции taskqueue.add (). Как сделать задачу асинхронной? Любая помощь по этому вопросу приветствуется.

код выглядит так

class botinitiate(webapp.RequestHandler):
    def get(self):
        # some more statements here
        template_values = {'token': token,
                           'me': user.user_id()
                          }

        taskqueue.add(url='/autobot', params={'key':game_key},queue_name='autobot')
        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))


class autobot(webapp.RequestHandler):
    def post(self):
        # task logic goes here


application = webapp.WSGIApplication([('/botinitiate',botinitiate),('/autobot',autobot)],debug=True)


def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Спасибо

Ответы [ 3 ]

2 голосов
/ 21 марта 2013

Недавно разработанный dev_appserver2 обеспечивает параллелизм между запросами пользователей и запросами очереди задач для более точной эмуляции производства.

0 голосов
/ 29 мая 2014

Таким образом, вы будете использовать:

add_async(task, transactional=False, rpc=None)

Источник: https://developers.google.com/appengine/docs/python/taskqueue/queues

Вам необходимо прочитать документы по указанному выше URL-адресу и применить их к своему собственному коду.1007 *

0 голосов
/ 08 сентября 2011

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

...