I am using Google App Engine(GAE), python 2.7.
A GET request is received by the GAE and multiple jobs are required to be done by make_fetch_call. If I have only one object{A()} in 'searchPortals', 'handleCallBack' works fine. However, when i have two objects in 'searchPortals' { A() & B() } the 'handleCallBack' gives the reference of 'portalObject' twice for B().
1> How do i get the reference of 'portalObject' twice once first for A() and then for B() ?
2> Also, if preferable, i want to have single 'handleCallBack' implementation for all the objects in 'portalObjects' ?
Note -
'Initial Id' prints two memory reference say xx1 and xx2.
'call back id' prints memory references twice 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)