【发布时间】:2016-06-03 01:38:43
【问题描述】:
我正在使用 Google App Engine(GAE),python 2.7。
GAE 收到一个 GET 请求,make_fetch_call 需要完成多个作业。如果我在“searchPortals”中只有一个对象{A()},则“handleCallBack”可以正常工作。但是,当我在'searchPortals' { A() & B() } 中有两个对象时,'handleCallBack' 为 B() 提供了两次'portalObject' 的引用。
1>如何获得两次“portalObject”的引用,一次是 A(),然后是 B()?
2> 另外,如果更可取,我希望对“portalObjects”中的所有对象都有一个“handleCallBack”实现?
注意 -
'Initial Id' 打印两个内存引用,比如 xx1 和 xx2。
'call back id' 打印内存引用两次 xx2
class SearchHandler(webapp2.RequestHandler):
def __init__(self,*args, **kwargs):
super(SearchHandler,self).__init__(*args, **kwargs)
self.result=[]
self.searchPortals = [A(), B()]
def handleCallBack(self,rpc,portalObject):
logging.info("call back id " + str(id(portalObject)))
def getSearchResult(self):
rpcs=[]
searchKeyword=self.request.get('searchString')
for portal in self.searchPortals:
rpc = urlfetch.create_rpc(deadline=5)
rpc.callback = lambda: self.handleCallBack(rpc, portal)
urlfetch.make_fetch_call(rpc, portal.getSearchURL(searchKeyword))
logging.info('initial id ' + ' ' + str(id(portal)))
rpcs.append(rpc)
for rpc in rpcs:
rpc.wait()
#do some processing
app = webapp2.WSGIApplication([
webapp2.Route(r'/search', methods=['GET'], handler='Main.SearchHandler:getSearchResult')
], debug=False)
【问题讨论】:
-
太棒了..这解决了问题。
标签: google-app-engine callback urlfetch asynccallback google-app-engine-python