0

我想收集一些需要一些时间来处理的统计数据,但它不会影响正在返回的用户内容。我目前正在通过首先缓存,然后使用 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)

4

2 回答 2

2

您可以使用延迟库

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 的调用立即返回。当然,您将无法在返回给用户的内容中包含该延迟函数的任何结果。

于 2013-01-01T12:53:23.023 回答
1

Google App Engine 的 API 提供了一个任务队列来处理这种情况。

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")
于 2013-01-01T13:01:16.250 回答