Асинхронный вызов в google appengine с использованием очередей задач в python

1

Im новое для очереди задач api в движке Google. Я создал новую очередь и добавил в нее задачу с помощью функции taskqueue.add(). Я определил url задачи и записал логику для задачи 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()

благодаря

  • 0
    Как вы подтвердили, что приложение ожидает завершения задачи, чтобы отправить ответ?
  • 0
    используя журналы приложения. Он завершает задачу, прежде чем продолжить с утверждениями после taskqueue.add ()
Показать ещё 2 комментария
Теги:
google-app-engine
task-queue

3 ответа

2

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

0

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

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

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню