返回内容后处理数据 - GAE Python

时间:2013-01-01 12:41:53

标签: python google-app-engine python-2.7

我想收集一些需要一些时间来处理的统计数据,但这不会影响正在返回的用户内容。我目前正在通过第一次缓存,然后使用cron作业处理它。

返回用户内容后,有没有办法立即完成这项工作?

应该是这样的:

def post(self):
    self.response.out.write("some output")
    # here user should not wait any more output
    # loading should be end in user browser.

    collectSomeStatistics(self)

(我正在使用Python 2.7)

2 个答案:

答案 0 :(得分:2)

您可以使用deferred library

from google.appengine.ext import deferred

def do_something_expensive(a, b, c=None):
  logging.info("Doing something expensive!")
  # Do your work here

# Somewhere else
deferred.defer(do_something_expensive, "Hello, world!", 42, c=True)

所以你的代码变成了:

def post(self):
  deferred.defer(collectSomeStatistics,args)
  self.response.out.write("some output")

然后执行您的函数作为单独的任务,并且对deferred的调用立即返回。当然,您将无法在返回给用户的内容中包含该延迟函数的任何结果。

答案 1 :(得分:1)

Google App Engine的API提供taskqueue来处理此类情况。

from google.appengine.api import taskqueue

def post(self):
    taskqueue.add(queue_name='expensive_query', url="/path/to/_an_internal_method/")
    self.response.out.write("some output")