2016-03-11 3 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 уже включает asynchronous requests service в google.appengine.api.urlfetch; вы должны использовать это.

Смежные вопросы