2010-11-03 114 views
0

我可以使用任务队列来更改数据库值,但是如何使用任务队列获取像Ajax一样的返回值?如何使用Google App Engine上的任务队列获取返回值(如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'?

回答

2

当前的Task Queue API不支持处理返回值或将它们发送回原点。你的appengine过程并不足以让这种编程范式起作用。

在您的例子,它看起来像你想要的东西是这样的:

  1. 创建任务
  2. 返回AJAX代码,将轮询任务状态处理
  3. 工作流程,更新数据存储与返回值
  4. 任务状态URL返回更新的值

另外,如果你不想沤把'sss'给客户端,但需要进一步处理,你需要将你的方法分成多个部分。第一部分创建任务,然后退出。在任务过程结束时,它会自己添加一个新任务,用返回值回调第二部分。

相关问题