【问题标题】:make multiple asynchronous request in python gae在 python gae 中发出多个异步请求
【发布时间】:2016-03-11 10:37:40
【问题描述】:
    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>")

尝试使用上述代码异步获取 url。从我的日志看来,调用实际上是串行的,而不是并行的。我有什么方法可以在 gae 中实现这一点。谢谢。

【问题讨论】:

  • 这在生产中真的有效吗?

标签: python google-app-engine


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2016-11-15
    • 2015-01-17
    相关资源
    最近更新 更多