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()
благодаря
Недавно разработанный dev_appserver2 обеспечивает параллелизм между запросами пользователей и запросами очереди задач для более точной эмуляции производства.
Таким образом, вы будете использовать:
add_async(task, transactional=False, rpc=None)
Источник: https://developers.google.com/appengine/docs/python/taskqueue/queues
Вам нужно будет прочитать документы по указанному выше URL-адресу и применить его к своему собственному коду.
Очереди задач в App Engine асинхронны; нет пути для запроса, который задал задачу, чтобы знать, когда выполняется задача (не считая вызовов RPC или другой умышленной коммуникации). То, что вы можете наблюдать, это однопоточный характер среды разработки dev_appserver; это, конечно же, не будет в производстве.