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 に答える