Python 如何在GoogleAppEngine上使用任务队列获取返回值(如Ajax)

Python 如何在GoogleAppEngine上使用任务队列获取返回值(如Ajax),python,ajax,google-app-engine,task-queue,Python,Ajax,Google App Engine,Task Queue,我可以使用任务队列来更改数据库值,但是如何使用任务队列像Ajax一样获得返回值呢 这是我的代码: from google.appengine.api.labs import taskqueue from google.appengine.ext import db from google.appengine.ext import webapp from google.appengine.ext.webapp import template from google.appengine.ext.we

我可以使用任务队列来更改数据库值,但是如何使用任务队列像Ajax一样获得返回值呢

这是我的代码:

from google.appengine.api.labs import taskqueue
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
import os

class Counter(db.Model):
    count = db.IntegerProperty(indexed=False)

class BaseRequestHandler(webapp.RequestHandler):
    def render_template(self, filename, template_values={}):
        values={
        }
        template_values.update(values)
        path = os.path.join(os.path.dirname(__file__), 'templates', filename)
        self.response.out.write(template.render(path, template_values))


class CounterHandler(BaseRequestHandler):
    def get(self):
        self.render_template('counters.html',{'counters': Counter.all()})

    def post(self):
        key = self.request.get('key')
        # Add the task to the default queue.
        for loop in range(0,1):
            a=taskqueue.add(url='/worker', params={'key': key})

        #self.redirect('/')

        self.response.out.write(a)

class CounterWorker(webapp.RequestHandler):
    def post(self): # should run at most 1/s
        key = self.request.get('key')
        def txn():
            counter = Counter.get_by_key_name(key)
            if counter is None:
                counter = Counter(key_name=key, count=1)
            else:
                counter.count += 1
            counter.put()
        db.run_in_transaction(txn)
        self.response.out.write('sss')#used for get by task queue

def main():
    run_wsgi_app(webapp.WSGIApplication([
        ('/', CounterHandler),
        ('/worker', CounterWorker),
    ]))

if __name__ == '__main__':
    main()
如何显示“sss”?

当前不支持处理返回值或将返回值发送回原点。您的appengine进程的寿命不够长,无法让该编程范式正常工作

在您的示例中,您想要的是这样的:

  • 创建任务
  • 返回将轮询任务状态处理程序的AJAX代码
  • 任务处理,使用返回值更新数据存储
  • 任务状态url返回更新的值
  • 或者,如果不想将“sss”返回给客户端,而是需要它进行进一步处理,则需要将方法拆分为多个部分。第一部分创建任务,然后退出。在任务流程结束时,它会添加一个新任务本身,以使用返回值回调到第二部分