使用python中的任务队列在google appengine中进行异步调用

时间:2011-09-07 11:46:57

标签: python google-app-engine task-queue

我是谷歌应用引擎中的任务队列api新手。我创建了一个新队列,并使用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()

谢谢

3 个答案:

答案 0 :(得分:2)

最近开发的dev_appserver2提供了用户请求和任务队列请求之间的并发性,以便更准确地模拟生产。

答案 1 :(得分:0)

App Engine上的任务队列是异步的;排队任务的请求无法知道任务何时运行(没有进行RPC调用或其他故意的通信)。您可能正在观察的是dev_appserver开发环境的单线程特性;这肯定不会在生产中出现。

答案 2 :(得分:0)

所以你要使用:

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

来源:https://developers.google.com/appengine/docs/python/taskqueue/queues

您需要阅读上述网址上的文档并将其应用到您自己的代码中。