【问题标题】:Setting multiple callback for asynchronous request to the URL Fetch service in GAE? [duplicate]为GAE中的URL Fetch服务设置异步请求的多个回调? [复制]
【发布时间】: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


【解决方案1】:
rpc.callback = lambda portal=portal: self.handleCallBack(rpc, portal)

如 Daniel 所述更改此问题解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多