2016-03-11 31 views
0
import threading 
import urllib2 

import time 
import webapp2 

import main 

start = time.time() 
url = "http://exmple.com?phone=" 
class BatchSuscriber(webapp2.RequestHandler): 
    def get(self): 
     template = main.JINJA_ENVIRONMENT.get_template('batch.html') 
     self.response.out.write(template.render()) 

    def post(self): 
     address = self.request.get('address') 
     numbers = str(self.request.get('numbers')).split(',') 
     threads = [threading.Thread(target=self.fetch_url, args=(phone,)) for phone in numbers] 
     for thread in threads: 
      thread.start() 
     for thread in threads: 
      thread.join() 
     self.response.write("Elapsed Time: %s" % (time.time() - start)) 
     self.response.write("<br>") 


    def fetch_url(self,phone): 
     urlHandler = urllib2.urlopen(url+phone) 
     html = urlHandler.read() 
     self.response.write(html) 
     self.response.write("<br>") 
     self.response.write("'%s\' fetched in %ss" % (url+phone, (time.time() - start))) 
     self.response.write("<br>") 

试图使用上述代码异步制作urlfetch。从我的日志看来,这个调用实际上是串行的,而不是并行的。我可以通过哪些方式在gae中实现这一点。谢谢。在python gae中发出多个异步请求

+0

这是否确实在生产中起作用? –

回答

2

尝试使用线程在这里完全是错误的方法。 GAE已在google.appengine.api.urlfetch中包含asynchronous requests service;你应该使用它。